我有这样的table:
diskno regdate regtime remarks
d001 2020/07/01 12:59:00 abc
d001 2020/07/01 13:00:06 def
d002 2020/07/02 16:00:00 ghi
d003 2020/07/04 07:00:00 jkl
d003 2020/07/05 06:00:50 mno
并且只想获取每个diskno的1条最新记录,并在后面为该diskno添加count列。我应该如何在oraclesql中做到这一点?
预期结果:
diskno regdate regtime remarks diskcount
d001 2020/07/01 13:00:06 def 2
d002 2020/07/02 16:00:00 ghi 1
d003 2020/07/05 06:00:50 mno 2
- regdate和regtime都是varchar2。
3条答案
按热度按时间cbeh67ev1#
考虑到时间是多么奇怪的领域,我想试试这个
例子
vyswwuz22#
一个选项使用分析函数,例如
ROW_NUMBER()
以及COUNT() OVER ...
```WITH t2 AS
(
SELECT t.,
ROW_NUMBER() OVER
( PARTITION BY diskno ORDER BY regdate DESC, regtime DESC ) AS rn,
COUNT() OVER ( PARTITION BY diskno ) AS diskcount
FROM t
)
SELECT diskno, regdate, regtime, remarks, diskcount
FROM t2
WHERE rn = 1
zrfyljdw3#
你可以用
GROUP BY
和聚合函数KEEP ( DENSE_RANK ... )
获取最大值依赖于另一个最大值的行的语法:对于您的示例数据:
这将输出:
db<>在这里摆弄