您好我有样本表数据
ID name St_dt points
1 Mohan 2017-07-10 20
1 Mohan 2017-07-10 25
1 Mohan 2017-07-07 30
当我试图挑选最近两天时
脚本:
select * from table
Where St_dt >= Cast(Dateadd(day, -1, Getdate()) AS DATE)
我如何精确地选择最后两天意味着上面的脚本不同的日期我没有得到确切的结果。 以下结果我需要
输出:
ID name St_dt points
1 Mohan 2017-07-10 20
1 Mohan 2017-07-07 30
答案 0 :(得分:1)
使用ROW_NUMBER()
每个日期可以获得一行,然后您只需从该结果集中选择最后两行
SELECT TOP 2 * FROM
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY St_dt ORDER BY ID) as RN
FROM table
) x
WHERE x.RN =1
ORDER BY St_dt DESC
答案 1 :(得分:0)
在子查询中使用distinct,然后选择前2个desc。用户外部申请获取其他字段
select top 2 a.*
from
(select distinct St_dt
from table) c
outer apply (select top 1 * from table where St_dt = c.St_dt) a
order by St_dt desc