我有一些数据如下
Name Flag1 Flag2 Flag3 Flag4
Jason 500 400 200 100
Mark 400 299 250 183
Tom 932 331 283 844
我能够通过编写
找到所有4个标志中的最大值Max = CASE WHEN flag1>flag2 AND flag1>flag3 AND flag1>flag4 THEN 'flag1'
WHEN flag1<flag2 AND flag2>flag3 AND flag2>flag4 THEN 'flag2'
WHEN flag1<flag3 AND flag2<flag3 AND flag3>flag4 THEN 'flag3'
WHEN flag1<flag4 AND flag2<flag4 AND flag3<flag4 THEN 'flag4'END
你能帮我找到Flag1-Flag4中的第二大值吗?例如,Jason的第二大应该是flag2
提前谢谢!
答案 0 :(得分:0)
您可以取消隐藏数据,然后按以下方式进行查询
SELECT name,flags,flag FROM (
SELECT ROW_NUMBER() OVER(PARTITION BY name ORDER BY flag DESC) rn,*
FROM
(
SELECT name, flag, flags
FROM
(
SELECT 'json' name, 500 flag1,400 flag2,200 flag3, 100 flag4
UNION ALL
SELECT 'Mark' name, 400 flag1,299 flag2,250 flag3, 183 flag4
UNION ALL
SELECT 'Tom' name, 932 flag1,331 flag2,283 flag3, 844 flag4
) AS cp
UNPIVOT
(
flag FOR flags IN (flag1, flag2, flag3, flag4)
) AS up
)x
)y
WHERE rn=2
P.S。在查询的中间,我只用一堆选择和联合所有
来模拟你的数据 p,s此外,您也可以通过此查询获得第一笔金额,请查看rn = 2