Oracle:如何以最大日期记录?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

我们假设我提取了一些数据。

SELECT A, date
FROM table

而我只想记录最大日期(对于A的每个值)。我可以写

SELECT A, col_date
  FROM TABLENAME t_ext
 WHERE col_date = (SELECT MAX (col_date)
                     FROM TABLENAME t_in
                    WHERE t_in.A = t_ext.A)

但我的查询真的很长......是否有一种使用ANALYTICAL FUNCTION来执行相同操作的最紧凑的方法?

提问于
用户回答回答于

解析函数法看起来就像

SELECT a, some_date_column
  FROM (SELECT a,
               some_date_column,
               rank() over (partition by a order by some_date_column desc) rnk
          FROM tablename)
 WHERE rnk = 1

用户回答回答于

如果datecol_date你应该简单地执行的列是:

SELECT A, MAX(date) FROM t GROUP BY A

为什么不使用:

WITH x AS ( SELECT A, MAX(col_date) m FROM TABLENAME )
SELECT A, date FROM TABLENAME t JOIN x ON x.A = t.A AND x.m = t.col_date

否则:

SELECT A, FIRST_VALUE(date) KEEP(dense_rank FIRST ORDER BY col_date DESC)
  FROM TABLENAME
 GROUP BY A

扫码关注云+社区