我需要连续显示每个人的最后三个雇主姓名。
我使用了Rank()和Max()方法,想知道是否有一种简单的方法来使用分析函数来解决这个问题。我尝试使用NTH_VALUE,但我仍然需要使用max函数以行格式显示结果。
SELECT
ID,
MAX(CASE WHEN RANK=1 THEN EMPLOYER_NAME END) EMPLOYER_NAME1,
MAX(CASE WHEN RANK=2 THEN EMPLOYER_NAME END) EMPLOYER_NAME2,
MAX(CASE WHEN RANK=3 THEN EMPLOYER_NAME END) EMPLOYER_NAME3
FROM (
SELECT ID,EMPLOYER_NAME,RANK() OVER (PARTITION BY ID ORDER BY START_DATE DESC) RANK
FROM EMP
)
WHERE RANK<4
GROUP BY ID所需输出:
ID, EMPLOYER_NAME1, EMPLOYER_NAME2, EMPLOYER_NAME3
max, delotte , apple, google发布于 2019-07-19 22:24:34
你需要一个GROUP BY
SELECT ID,
MAX(CASE WHEN RANK = 1 THEN EMPLOYER_NAME END) as EMPLOYER_NAME1,
MAX(CASE WHEN RANK = 2 THEN EMPLOYER_NAME END) as EMPLOYER_NAME2,
MAX(CASE WHEN RANK = 3 THEN EMPLOYER_NAME END) as EMPLOYER_NAME3
FROM (SELECT ID,EMPLOYER_NAME,RANK() OVER (PARTITION BY ID ORDER BY START_DATE DESC) RANK
FROM EMP
) e
WHERE RANK < 4
GROUP BY id;请注意,ELSE NULL是不必要的,因为这是CASE表达式在没有ELSE的情况下的工作方式。
https://stackoverflow.com/questions/57114448
复制相似问题