一連のデータを抽出すると仮定しましょう。
つまり.
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)
しかし、私のクエリは本当に長い...アナリティック関数を使用して同じことを行うよりコンパクトな方法はありますか?
分析関数のアプローチは次のようになります
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
タイの処理方法(またはデータモデルでタイが可能かどうか)に応じて、ROW_NUMBER
または DENSE_RANK
RANK
ではなく分析関数。
date
およびcol_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
以下も使用できます。
SELECT t.*
FROM
TABLENAME t
JOIN
( SELECT A, MAX(col_date) AS col_date
FROM TABLENAME
GROUP BY A
) m
ON m.A = t.A
AND m.col_date = t.col_date
Aがキー、max(date)が値です。以下のようにクエリを単純化できます。
SELECT distinct A, max(date) over (partition by A)
FROM TABLENAME
Justin Caveの答えは最高ですが、別のオプションが必要な場合は、これを試してください:
select A,col_date
from (select A,col_date
from tablename
order by col_date desc)
where rownum<2