【问题标题】:Select newest data from id A从 id A 中选择最新数据
【发布时间】:2020-04-16 10:31:47
【问题描述】:

我有这样的数据:

ID  TRANS_ID  CREATED_DATE             STATUS
----------------------------------------------
1   AA        2017-05-19 02:00:00      WAITING
2   AA        2017-05-20 02:00:00      IN_PROCESS
3   BB        2017-05-19 02:00:00      WAITING
4   CC        2017-05-19 02:00:00      WAITING
5   CC        2017-05-20 02:00:00      IN_PROCESS

我想像这样在表格视图中显示数据:

ID  TRANS_ID  CREATED_DATE             STATUS
----------------------------------------------
2   AA        2017-05-20 02:00:00      IN_PROCESS
3   BB        2017-05-19 02:00:00      WAITING
5   CC        2017-05-20 02:00:00      IN_PROCESS

我从每个 trans_id 获取最新数据并运行此查询,但它不起作用

select id, max(created_date), trans_id, status
from table_a
group by a.transaction_id

【问题讨论】:

    标签: sql oracle oracle11g oracle12c greatest-n-per-group


    【解决方案1】:

    一种选择是使用相关子查询进行过滤:

    select t.*
    from mytable t
    where t.created_date = (
        select max(t1.created_date) from mytable t1 where t1.trans_id = t.trans_id
    )
    

    或者,您可以使用窗口函数:

    select id, trans_id, created_date, status
    from (
        select t.*, rank() over(partition by trans_id order by created_date desc) rn
        from mytable t
    ) t
    where rn = 1
    

    如果有的话,这允许顶级关系。如果你不想打领带,你可以用row_number()代替rank()

    【讨论】:

      猜你喜欢
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      • 2013-05-31
      • 2013-04-26
      • 2015-08-25
      • 1970-01-01
      相关资源
      最近更新 更多