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查询以获取具有不同时间戳的多行的主要内容,如果未能解决你的问题,请参考以下文章

CouchDB 查询以获取具有 MAX 时间戳的文档

如何获取具有完整时间时间戳的 java.sql.Date 对象

用于从表中选择具有最新时间戳的行的 JOOQ 代码

如何仅从组中查询具有最新时间戳的文档?

熊猫合并具有不同时间戳的数据帧一

在 Apache Druid SQL 查询中结合 TIME_FLOOR 和 MILLIS_TO_TIMESTAMP 以获取纪元时间戳