私は現在、最大日付を取得するためにこのグループを実行しています:
SELECT A, MAX(B) FROM X GROUP BY A
これは完全に機能しています。しかし、2 番目に高い値を取得しようとすると、完全に失われます。
誰かがアイデアを持っているなら...
私は現在、最大日付を取得するためにこのグループを実行しています:
SELECT A, MAX(B) FROM X GROUP BY A
これは完全に機能しています。しかし、2 番目に高い値を取得しようとすると、完全に失われます。
誰かがアイデアを持っているなら...
これを試して:
SELECT X.A,
MAX(X.B)
FROM YourTable X
JOIN
(
SELECT
X1.A,
MAX(X1.B)
FROM YourTable X1
GROUP BY X1.A
) X1 ON X1.A = X.A
AND X.B < X1.B
GROUP BY X.A
基本的にこれは、最大値よりも小さいすべてのものの最大値を取得することを意味します。
cteでランキング関数を使用できROW_NUMBER
ます。
WITH CTE AS
(
SELECT A,
MaxB = MAX(B)OVER(PARTITION BY A),
RN = ROW_NUMBER() OVER (PARTITION BY A ORDER By B DESC)
FROM dbo.X
)
SELECT A, MaxB
FROM CTE
WHERE RN <= 2
これにより、各グループの 2 つの最大値が返されます (それが必要な場合)。
あなたの列はかなりあいまいですが、Aがmax_dateの場合、Bはソートしたい他の値であり、それを行う1つの方法は次のとおりです。
SELECT A FROM X ORDER BY B DESC LIMIT 2
これにより、2番目に高いものが最初に表示される2行が得られます。