首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每行每个人的最后3个就业信息

每行每个人的最后3个就业信息
EN

Stack Overflow用户
提问于 2019-07-19 22:21:17
回答 1查看 50关注 0票数 0

我需要连续显示每个人的最后三个雇主姓名。

我使用了Rank()和Max()方法,想知道是否有一种简单的方法来使用分析函数来解决这个问题。我尝试使用NTH_VALUE,但我仍然需要使用max函数以行格式显示结果。

代码语言:javascript
复制
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

所需输出:

代码语言:javascript
复制
ID,  EMPLOYER_NAME1, EMPLOYER_NAME2, EMPLOYER_NAME3
max, delotte       , apple,          google
EN

回答 1

Stack Overflow用户

发布于 2019-07-19 22:24:34

你需要一个GROUP BY

代码语言:javascript
复制
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的情况下的工作方式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57114448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档