0

私は現在、最大日付を取得するためにこのグループを実行しています:

SELECT A, MAX(B) FROM X GROUP BY A

これは完全に機能しています。しかし、2 番目に高い値を取得しようとすると、完全に失われます。

誰かがアイデアを持っているなら...

4

3 に答える 3

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

基本的にこれは、最大値よりも小さいすべてのものの最大値を取得することを意味します。

于 2013-11-05T16:13:24.470 に答える
0

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 つの最大値が返されます (それが必要な場合)。

于 2013-11-05T16:12:05.830 に答える
0

あなたの列はかなりあいまいですが、Aがmax_dateの場合、Bはソートしたい他の値であり、それを行う1つの方法は次のとおりです。

SELECT A FROM X ORDER BY B DESC LIMIT 2

これにより、2番目に高いものが最初に表示される2行が得られます。

于 2013-11-05T16:14:40.980 に答える