0

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

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

这是完美的工作。但是,当我尝试检索第二高的值时,我完全迷失了。

如果有人有想法...

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

ROW_NUMBER您可以在cte中使用排名功能:

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

这将返回每个组的两个最高值(如果这是您想要的)。

于 2013-11-05T16:12:05.830 回答
0

您的列相当模糊,但是如果 A 是 max_date 那么, B 是您希望排序的其他值,那么一种方法可能是:

SELECT A FROM X ORDER BY B DESC LIMIT 2

这将为您提供 2 行,首先显示第二高。

于 2013-11-05T16:14:40.980 回答