【问题标题】:Get row number result in correct order?以正确的顺序获取行号结果?
【发布时间】:2020-01-22 17:10:26
【问题描述】:

我有一个查询要根据 yearleftpost 获取 JobRanking 以获得最新的工作,然后是以前的工作。

select
    c.id,
    c.Fname,
    cfe.JobYear,
    cfe.YearLeftPost,
    cfe.Iscurrentjob,                                         
    ROW_NUMBER() OVER (Partition by c.id ORDER BY Iscurrentjob DESC, yearleftpost DESC) AS JobRanking
from
candidates c
left join Candidate_FunctionalExperience cfe on c.id = cfe.CandidateID

它给了我结果:

id  Fname    JobYear  YearLeftPost  Iscurrentjob JobRanking
EC2 sdsadsa  1430     1433              1           1
EC2 sdsadsa  1429     1430              0           2
EC2 sdsadsa  1424     1428              0           3
EC2 sdsadsa  1428     1428              0           4
EC2 sdsadsa  1424     1426              0           5

现在,我有一个 IscurrentJob(布尔值)0 或 1,我没有得到正确的 JobRanking 顺序。

【问题讨论】:

  • 编辑问题添加完整示例输出,因为您的 SELECT 语句具有 6 列,但您仅显示 4 列。
  • 不使用图片的原因是here

标签: sql sql-server tsql ranking-functions


【解决方案1】:

如果您希望 Iscurrenjjob=1 行在排名中排名第一,请将其添加到您的排序子句中:

Partition by c.id ORDER BY Iscurrentjob DESC, yearleftpost DESC

【讨论】:

  • 这给了我 2 JobRanking = 1 在同一个结果集中。
  • @RKKK 是否有相同的 ID?您应该根据分区为每个 id 设置不同的排名。
  • 感谢 Stanley :),现在我在没有当前工作和当前工作值的情况下尝试了这两种情况,
  • select c.id, c.Fname, cfe.JobYear, cfe.YearLeftPost, cfe.Iscurrentjob, ROW_NUMBER() OVER (partition by c.id ORDER BY Iscurrentjob DESC, yearleftpost DESC) AS JobRanking from候选人 c 离开加入 Candidate_FunctionalExperience cfe on c.id = cfe.CandidateID
  • 这有效,但在 yearleftpost 相同的情况下无效。当工作只有几个月但我们没有任何月/日字段可供计算时,这是可能的
【解决方案2】:

使用条件排序:

ROW_NUMBER() OVER (
  Partition by c.id 
  ORDER BY CASE WHEN cfe.Iscurrentjob = 1 THEN 0 ELSE 1 END, yearleftpost DESC
) AS JobRanking

【讨论】:

  • 编辑了问题,但Yearleftpost的日期相同时排名仍然错误
  • 发布每个场景的示例数据和预期结果以澄清。
【解决方案3】:

这应该可以完成工作。

 select
    c.id,
    c.Fname,
    cfe.JobYear,
    cfe.YearLeftPost,
    cfe.Iscurrentjob,                                         
    ROW_NUMBER() OVER (order by c.id) AS JobRanking
 from
 candidates c
 left join Candidate_FunctionalExperience cfe on c.id = cfe.CandidateID
 ORDER BY cfe.Iscurrentjob desc, cfe.YearLeftPost desc

【讨论】:

  • 编辑了问题,但Yearleftpost的日期相同时排名仍然错误
  • 嗨@RKKK,请告诉我们你想要它怎么样?谢谢!
  • 我已经更新了我的答案......但是在盲目的情况下,我没有询问任何信息。请尝试并评论您希望订购的产品是什么?谢谢!
猜你喜欢
  • 1970-01-01
  • 2010-09-25
  • 2021-11-19
  • 1970-01-01
  • 1970-01-01
  • 2020-01-05
  • 2015-08-07
  • 1970-01-01
  • 2022-01-20
相关资源
最近更新 更多