SQL查询以获取具有不同时间戳的多行
Posted
技术标签:
【中文标题】SQL查询以获取具有不同时间戳的多行【英文标题】:SQL query to get multiple rows with different timestamps 【发布时间】:2021-12-14 12:10:24 【问题描述】:我正在尝试获取一些带有最新时间戳的数据。数据集有不同的时间戳,我需要使用它们的时间戳来获取。例如:
id | testcase_id | user | timestamp |
---|---|---|---|
1 | 2 | abbc | 2013-01-13 15:00:00 |
2 | 2 | pbbb | 2013-01-13 15:05:00 |
3 | 4 | dddd | 2013-01-13 15:05:00 |
4 | 4 | abbc | 2010-01-10 16:04:00 |
对于abbc
需要获取具有最新timestamp(2013-01-13 15:00:00)
的第1 行,我需要具有pbbb (2013-01-13 15:05:00)
的第2 行和第3 行dddd (2013-01-13 15:05:00)
。我在后端为每个用户都有这个时间戳数据,只需要一个适当的查询来使用时间戳获取所有这些行。
注意:可能有多个用户具有相同的时间戳,例如 - 如果 10 个用户具有与 abbc 相同的时间戳,我将需要所有这些用户。
【问题讨论】:
【参考方案1】:JPQL 对其允许的语法很挑剔。您可以在这里尝试使用相关子查询:
select e
from your_entity e
where e.timestamp = (select max(f.timestamp)
from your_entity f where f.user = e.user)
【讨论】:
【参考方案2】:试试 CTE + 解析函数 row_number()
with t1 as (
select id, testcase_id, user, timestamp,
row_number() over (partition by user order by timestamp desc) rno
from your_table)
select select id, testcase_id, user, timestamp
from t1
where rno = 1
【讨论】:
如果 JPA 和 JPQL 标记准确,那么您的查询将不起作用。 你说得对,解决方法是创建一个返回 OP 想要的视图。以上是关于SQL查询以获取具有不同时间戳的多行的主要内容,如果未能解决你的问题,请参考以下文章
如何获取具有完整时间时间戳的 java.sql.Date 对象
在 Apache Druid SQL 查询中结合 TIME_FLOOR 和 MILLIS_TO_TIMESTAMP 以获取纪元时间戳