现在有一张表的结构大致如下:
PK       FK      COL1       COL2         DATE
1        1       ……       ……         2007-03-01
2        1       ……       ……         2007-03-01
3        1       ……       ……         2007-03-02
4        2       ……       ……         2007-03-03
5        3       ……       ……         2007-03-04
……也就是说,外键与主键之间存在一对多的关系。现在需要从这张表中按FK进行分组,查询每组中DATE离当前日期最近的一条记录。我是这样写的SQL:
Select ID,FK,COL1,COL2,DATE From TABLE,(Select id,Max(DATE) M From TABLE Group By FK) A Where TABLE.ID = A.ID And TABLE.DATE = A.M现在的问题是,由于DATE的值可以相同,所以对于同一个FK,可能存在多个日期相同的记录,这样刚才的SQL语句就会查询出多条记录。不知道各位有什么好的方法来解决这个问题没有,不胜感激!

解决方案 »

  1.   

    Select id,Max(DATE) M From TABLE Group By FK
    这个错了吧?应该group by id才对
      

  2.   

    感觉有问题
    如果
    PK       FK      COL1       COL2         DATE
    1        1       ……       ……         2007-03-01(最大日期)
    2        1       ……       ……         2007-03-01(最大日期)
    这样的话,你想要哪条记录呢?
      

  3.   

    试试:
    select a.*
      from (select 
                   row_number() over(partition by FK order by DATE desc) rw,
                   TABLE.*
              from TABLE 
           ) a
     where a.rw = 1
      

  4.   

    select
        t.*
    from
        表 t
    where
        not exists(select * from 表 where FK=t.FK and DATE>t.DATE)
      

  5.   

    select
        a.*
    from
        表 a,
        (select FK,max(DATE) as DATE from 表 group by FK) b
    where
        a.FK=b.FK and a.DATE=b.DATE
      

  6.   

    可以用PK字段:select
        t.*
    from
        表 t
    where
        not exists(select * from 表 where FK=t.FK and PK>t.PK)