sql-server - 我可以从将 Column2 与(Column2 与 Column1 中的最新时间戳)进行比较的表中选择 * 吗?
问题描述
表格示例
Column1 (datetime) Column2 (varchar)
-----------------------------------------
2-22-2022 1:11:11 1234-1
2-22-2022 1:12:11 1234-1
2-22-2022 1:13:11 4321-1
2-22-2022 1:14:11 4321-1
2-23-2022 7:00:00 4321-1
2-23-2022 7:02:00 4321-1
2-23-2022 7:04:00 4321-1
2-23-2022 7:10:00 1111-1
2-23-2022 7:11:00 1111-1
2-23-2022 7:12:00 1111-1
2-23-2022 7:13:00 1111-1
我正在记录过程数据。该Column2
编号将重复直到批次完成,然后将记录下一个批次的新编号。我只想在此示例中返回最后两行,但行数可能取决于记录数。
我想返回 1111-1 中的所有行Column2
。可能有 < 或 > 4 条记录。
期望的结果
Column1 (datetime) Column2 (varchar)
-----------------------------------------
2-23-2022 7:10:00 1111-1
2-23-2022 7:11:00 1111-1
2-23-2022 7:12:00 1111-1
2-23-2022 7:13:00 1111-1
解决方案
如果您需要获取每批的最后两行,那么您可以使用:
with cte as
(SELECT Column1, Column2,
rowNum = ROW_NUMBER() OVER (PARTITION BY Column2 ORDER BY Column1 DESC)
FROM Table)
select Column1, Column2
from cte
where rowNum in (1, 2)
order by Column1 desc
如果您需要获取已插入表中的最后两行,则可以使用:
SELECT TOP 2 Column1, Column2,
rowNum = ROW_NUMBER() OVER (PARTITION BY Column2 ORDER BY Column1 DESC)
FROM Table
ORDER BY Column1 desc
此外,如果您需要获取具有相同值的行,那么您可以使用 dense_rank() 而不是 row_number():
SELECT TOP 2 Column1, Column2,
rowNum = dense_rank() OVER (PARTITION BY Column2 ORDER BY Column1 DESC)
FROM Table
ORDER BY Column1 desc
推荐阅读
- selenium - WebDriverException: unknown error: Chrome failed to start: exited exceptionly error running Selenium Grid on Server using ChromeDriver and Chrome
- ms-access - MS Access 365 - 创建包含链接文件的子表单
- css - 为什么我的 Gatsby/Material-UI 站点呈现的比视口略大?
- azure - 在 azure ml 管道中,使用大型数据集训练模型时出错
- bash - 如何检查 bash 脚本的参数是否为“标志”
- ios - Ionic:不再接受 iOS UIWebView
- c# - 有谁知道为什么 C# 语音识别突然不再起作用了?
- python - 如何提高迭代的性能
- sass - Hugo loveit 主题中的样式定制
- ansible - ansible:在when语句中访问最后一个库存列表项/列表大小