【问题标题】:Multiple group by query in DB2DB2 中的多个分组查询
【发布时间】:2014-05-04 18:01:51
【问题描述】:

我需要在比较两列之后获取特定记录。 下面我来解释一下。

Serial_number(VARCHAR2)     Process_date(DATE)       Process_Time(TIME)
----------------------------------------------------------------------
1                           2010-12-01               11:45:05     
1                           2010-12-01               12:45:05
1                           2010-12-01               14:45:05
2                           2010-10-01               10:45:05
2                           2010-11-01               09:45:05
3                           2009-12-01               11:45:05

我想要如下结果:-

Serial_number(VARCHAR2)     Process_date(DATE)       Process_Time(TIME)
-----------------------------------------------------------------------
1                           2010-12-01               14:45:05
2                           2010-11-01               09:45:05
3                           2009-12-01               11:45:05

如果有多行相同的 Serial_number,我们只需要获取那些具有最新 Process_date 的行。如果 Process_date 相同,那么它应该获取那些具有最新 Process_Time 的行(该列的数据类型是 TIME)。

请帮我在 DB2 数据库中编写查询。

【问题讨论】:

  • 你试过MAX()函数和GROUP BY吗?

标签: sql db2


【解决方案1】:

在以下情况下使用 row_number() OLAP function 可能会有所帮助:

with ranked_rows as (
    select row_number() over (
               partition by serial_number 
               order by process_date asc process_time desc
           ) rank,
           serial_number,
           process_date,
           process_time
       from table
) 
select serial_number,
       process_date,
       process_time
    from ranked_rows
    where rank = 1

【讨论】:

    猜你喜欢
    • 2018-09-16
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多