如果我的三列和一列具有ID,则一列具有值,一列具有日期。例如,ID列具有ID1,ID2,ID3。每个ID的值都有一个数字值,例如每个ID分别为1,2,3,4,5。
如何根据最新的日期降序为每个ID仅获得3个结果。
我正在使用Sybase SQL。有什么办法可以写吗?
我尝试使用Row_number()和rank(),但是我的SQL工具中没有使用这两个函数。
ID value Date
1 3 20190511
1 1 20190503
1 5 20190401
2 2 20190520
2 1 20190514
2 4 20190503
3 1 20190516
3 5 20190415
3 3 20190402
答案 0 :(得分:0)
如果您没有row_number
,请尝试
SELECT *
FROM yourTable t1
WHERE (SELECT COUNT(*)
FROM yourTable t2
WHERE t1.id = t2.id
AND t1.date < t2.date) < 3
因此,如果一个ID具有3个或更多个旧行,则不会出现。
具有行号
SELECT *
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY id ORDER BY date DESC) as rn
FROM YourTable t1
) as t
WHERE t.rn <= 3
我假设您在同一日期不能有多行。在这种情况下,您可能需要使用RANK()
或DENSE_RANK()
并决定如何处理领带。
答案 1 :(得分:0)
一种方法使用带有in
的相关子查询:
select t.*
from t
where t.date in (select top (3) t2.date
from t t2
where t2.id = t.id
order by t2.date desc
);
请注意,这是假设日期是唯一的。