现在有一张表的结构大致如下:
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语句就会查询出多条记录。不知道各位有什么好的方法来解决这个问题没有,不胜感激!
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语句就会查询出多条记录。不知道各位有什么好的方法来解决这个问题没有,不胜感激!
这个错了吧?应该group by id才对
如果
PK FK COL1 COL2 DATE
1 1 …… …… 2007-03-01(最大日期)
2 1 …… …… 2007-03-01(最大日期)
这样的话,你想要哪条记录呢?
select a.*
from (select
row_number() over(partition by FK order by DATE desc) rw,
TABLE.*
from TABLE
) a
where a.rw = 1
t.*
from
表 t
where
not exists(select * from 表 where FK=t.FK and DATE>t.DATE)
a.*
from
表 a,
(select FK,max(DATE) as DATE from 表 group by FK) b
where
a.FK=b.FK and a.DATE=b.DATE
t.*
from
表 t
where
not exists(select * from 表 where FK=t.FK and PK>t.PK)