【问题标题】:Getting a row with two group by constraints获得具有两个分组约束的行
【发布时间】:2016-09-30 04:48:06
【问题描述】:

我有一张桌子

TIMESTAMP                 ID        Name
5/30/2016 11:45            1        Ben
5/30/2016 11:45            2        Ben
5/30/2016 23:15            2        Ben
5/30/2016 7:30             1        Peter
5/30/2016 6:05             1        Peter
5/30/2016 14:40            2        May
5/30/2016 1:05             1        May

现在,我需要获取每个不同名称的 MIN 时间戳。 然后,如果有多个 MIN 条目,请选择具有 MAX ID 的条目。

所以结果应该是

TIMESTAMP                 ID        Name
5/30/2016 11:45            2        Ben
5/30/2016 6:05             1        Peter
5/30/2016 1:05             1        May

我尝试使用以下查询:

SELECT MIN(TIMESTAMP),NAME FROM TBLSAMPLE WHERE TIMESTAMP BETWEEN TO_DATE('5/30/2016', 'MM/DD/YYYY') AND TO_DATE('5/30/2016', 'MM/DD/YYYY ') + 1 按名称分组

我可以得到最少的时间。但是,一旦我添加了 MAX(ID),结果就会返回一个与任何行都不匹配的条目。

非常感谢您的帮助。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您可以使用row_number()

    select t.*
    from (select t.*,
                 row_number() over (partition by name order by timestamp asc, id desc) as seqnum
          from tblsample t
         ) t
    where seqnum = 1;
    

    您的问题没有指定日期的条件。但是如果要添加where 子句,则将其添加到子查询中。

    【讨论】:

    • 非常感谢,这就是我要找的。另外,我学到了一些关于分析函数的知识。
    猜你喜欢
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多