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

标签 java sql sql-server

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

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

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

谢谢

最佳答案

我会使用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);

关于java - 如何编写 SQL 查询以使用 IN 子句获取第一条记录(最新)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51866519/

相关文章:

java - Hibernate5中的 "Reverse Engineering"功能在哪里?

java - 自定义数据在 map 输出中写入未知数据

java - 向特定端口发送短信

php - 是否可以从删除中获取结果?

sql - 为什么在 SQL Server 中查询日期数据类型为 yyyymmdd 而不是 yyyy-mm-dd?

sql-server - 事务日志备份后增长巨大

.net - 如何在不创建大缓冲区的情况下将大型 .NET 对象图序列化为 SQL Server BLOB?

java - 如何使用 Clover ETL 中的重新格式化组件更改参数值

MySQL 自定义排序(再次)ORDER BY 列的输出

sql-server - 用于生成模式文本的 SQL 命令(类似于 CreateTo 或 AlterTo)