首页 > 解决方案 > 如何编写 SQL 查询以使用 IN 子句获取第一条记录(最新)?

问题描述

我有一个包含一些数据(id)的excel文件,这些id在数据库中有不止一条记录。我有大约 400 个 id,我需要获取每个 id 的最新记录。我不想一件一件地做。我尝试使用 IN 子句,但没有奏效。

Select *
from myTable with (nolock)
where submission_number IN ('02597', '69875')
order by timestame DESC;

上面的查询不能满足我的要求。有人可以帮忙/指导吗?

谢谢

标签: javasqlsql-server

解决方案


我会这样做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);

推荐阅读