【问题标题】:SQL query to get multiple rows with different timestampsSQL查询以获取具有不同时间戳的多行
【发布时间】: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 相同的时间戳,我将需要所有这些用户。

【问题讨论】:

    标签: mysql sql jpa jpql


    【解决方案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 想要的视图。
      猜你喜欢
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      相关资源
      最近更新 更多