如何使用IN子句编写SQL查询以获取第一条记录(最新)?

时间:2018-08-15 21:12:54

标签: java sql sql-server

我有一个Excel文件,其中包含一些数据(ID),这些ID在数据库中有多个记录。我大约有400个ID,我需要获取每个ID的最新记录。我不想一个接一个地做。我尝试使用IN子句,但是没有用。

b

以上查询无法满足我的要求。可以请一些帮助/指导吗?

谢谢

2 个答案:

答案 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条件中。