java - 如何编写 SQL 查询以使用 IN 子句获取第一条记录(最新)?
问题描述
我有一个包含一些数据(id)的excel文件,这些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);
推荐阅读
- cuda - 如何在 GPU 中动态增加分配的内存。CUDA
- c++ - 在多线程环境中启动 std::async 函数后,有什么方法可以加速 future.get() 函数?
- javascript - 无法读取 ngFor 生成元素的父节点
- haskell - Haskell Cabal HUnit
- python - 并行运行多个 python 脚本
- reactjs - 我试图将顺风集成到 React Js 中,但出现此错误
- sql-server - WHERE by SUM in SELECT
- scikit-learn - 单变量 IsolationForest 的 Shap TreeExplainer 的 IndexError
- javascript - 为什么“通过导航守卫从“/login”转到“/”时重定向。” 正在出现?
- c# - C# SHA512 转 Base64,b64 字符串太长