--测试代码
use
SQL_Test
go
create table ttime(
  bh varchar(200) not null,
  sj datetime,
  num int not null
)
insert into ttime 
select '2009111601','2009-11-16 15:01:46','yes'
union all     
select '2009111601','2009-11-16 15:02:46','yes'
union all     
select '2009111601','2009-11-16 15:03:46','yes'
union all     
select '2009111601','2009-11-16 15:04:46','no'
union all     
select '2009111602','2009-11-16 15:05:46','yes'
union all     
select '2009111602','2009-11-16 15:06:46','no'--查询
??
--期望结果
no
no
我用了如下两个代码只能输出
yes
yes    $result=mysql_query("SELECT num, max(sj) as sj FROM ttime GROUP BY bh");
    while($row=mysql_fetch_array($result)){
    echo $row["num"]."<br />";
    }

解决方案 »

  1.   


    truncate table ttime 
    alter table ttime add num varchar(20) not null
    insert into ttime 
    select '2009111601','2009-11-16 15:01:46','yes'
    union all     
    select '2009111601','2009-11-16 15:02:46','yes'
    union all     
    select '2009111601','2009-11-16 15:03:46','yes'
    union all     
    select '2009111601','2009-11-16 15:04:46','no'
    union all     
    select '2009111602','2009-11-16 15:05:46','yes'
    union all     
    select '2009111602','2009-11-16 15:06:46','no'--MSSQL查询
    select bh,num='no',max(sj) as sj from ttime group by bh
    --Mysql查询
    select bh,num,max(sj) as sj from ttime group by bh
    --结果
    2009111601 no 2009-11-16 15:04:46.000
    2009111602 no 2009-11-16 15:06:46.000
      

  2.   


    SELECT * FROM ttime t 
    WHERE NOT EXISTS
    (SELECT 1 FROM ttime WHERE bh=t.bh AND sj>t.sj);
      

  3.   

    1、测试数据有误
    Incorrect integer value: 'yes' for column 'num' at row 1
    字段num的数据类型与插入数据'yes'的数据类型不一致
    2、grouy 始终输出找到的第一个符合条件的字段
    你需要
    SELECT * FROM ttime t 
    WHERE NOT EXISTS
    (SELECT 1 FROM ttime WHERE bh=t.bh AND sj>t.sj) group by bh
      

  4.   

    谢谢各位达人的帮助@dzxccsu达人我看您的方法输出的是空值呢? <?php
    $result=mysql_query("select bh,num='no',max(sj) as sj from ttime group by bh");
    while($row=mysql_fetch_array($result)){
    echo $row["num"]."<br />";
    }
    ?>
      

  5.   

    select bh,num='no',max(sj) as sj from ttime group by bh这句是在MSSQL中的,用
    select bh,num,max(sj) as sj from ttime group by bh这句MYSQL的
      

  6.   

    @zhoupuyue和xuzuning两位达人,你们的方法果然可行,$result=mysql_query("SELECT * FROM ttime t WHERE NOT EXISTS(SELECT 1 FROM ttime WHERE bh=t.bh AND sj>t.sj)");但我还是第一次看到这种写法,应该怎么理解呢?t在这里有何用?代替的ttime?
    我的理解是:
    1、SELECT * FROM ttime t WHERE NOT EXISTS
    首先选中不为空的所有行,将这些选中的值负值到t2、SELECT 1 FROM ttime WHERE bh=t.bh AND sj>t.sj
    bh=t.bh就等同于group by bh了?
    而sj>t.sj就等于max(sj)了?
    实在不明白,还望达人指点一二
      

  7.   

    @dzxccsu达人,那这两句话应该像楼上另外两位达人语句一样套着用罗?
    我试了下 //$result=mysql_query("select bh,num,max(sj) as sj from ttime group by bh(select bh,num='no',max(sj) as sj from ttime group by bh)"); $result=mysql_query("select bh,num='no',max(sj) as sj from ttime group by bh(select bh,num,max(sj) as sj from ttime group by bh)");
    while($row=mysql_fetch_array($result)){
    echo $row["num"]."<br />";
    }但都返回
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\test\c.php on line 26
      

  8.   

    SELECT num, max(sj) as sj FROM ttime order by sj desc  GROUP BY bh
    这个语句应该可以用,不过不是通用的语句,我本地暂时没调试环境,就按自己的猜测写的,希望有用
      

  9.   

    在ttime表中拿出一条记录,然后在ttime表中查询与这条记录的bh相同sj比这条记录大的,如果存在则不符合要求(not exists),如果不存在则符合要求,不存在的情况下就是bh相同,sj最大的那条记录。
      

  10.   

    不用套,你直接select bh,num,max(sj) as sj from ttime group by bh
    还有你的num类型要更改为字符类型
      

  11.   

    @zhoupuyue达人,谢谢您的耐心讲解@dzxccsu达人,不用套直接用的话还是返回两个yes,难道您刚才所说的“select bh,num='no',max(sj) as sj from ttime group by bh这句是在MSSQL中的”要将这句放在mysql控制面板里面的SQL语句输入那里?这样的话在php页面上不是就不能控制了吗?
    p.s. num的类型我之前就改了,1楼的主贴不能编辑了:)
      

  12.   

    我跑到mysql控制面板去运行dzxccsu达人您的第一句
    出现了这个结果
    然后跑回去在php叶面里面运行第二句,还是输出的两个yes
      

  13.   

    晕,我不是说了mysql中用select bh,num,max(sj) as sj from ttime group by bh 这句吗?