我有一个Excel文件,其中包含一些数据(ID),这些ID在数据库中有多个记录。我大约有400个ID,我需要获取每个ID的最新记录。我不想一个接一个地做。我尝试使用IN子句,但是没有用。
b
以上查询无法满足我的要求。可以请一些帮助/指导吗?
谢谢
答案 0 :(得分:1)
我可以使用apply
:
select t.*
from (values ('02597'), ('69875')) v(submission_number) cross apply
(select top (1) t.*
from mytable t
where t.submission_number = v.submission_number
order by t.timestamp desc
) t;
一个不错的功能是您可以使用outer apply
,即使表中没有匹配项,它也会在结果集中返回一行。
另一种不使用子查询的方法是
select top (1) with ties t.*
from myTable t
where submission_number in ('02597', '69875')
order by row_number() over (partition by submission_number order by timestame desc);
答案 1 :(得分:0)
您可以使用row_number
:
select *
from (
select *, row_number() over (partition by submission_number order by timestame desc) rn
from yourtable
) t
where rn = 1
这将为每个submission_number
返回一条记录。如果仅在in
子句中使用2,则可以将其添加回where
条件中。