GROUP BY获得第二高的日期

时间:2013-11-05 16:08:58

标签: tsql

我目前正在执行此分组以检索最大日期:

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

这非常有效。但是,当我尝试检索第二个最高值时,我完全迷失了。

如果有人有想法......

3 个答案:

答案 0 :(得分:1)

试试这个:

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

基本上这表示获得所有小于最大值的最大值

答案 1 :(得分: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 :(得分:0)

你的列是相当模糊的,但如果A是max_date,那么B是你想要排序的其他值,那么一种方法可以是:

SELECT A FROM X ORDER BY B DESC LIMIT 2

这将为您提供2行,其中第二个最高显示。