2017-08-11 62 views
0

下面的代码显示有多个候选人的学生,但不是他们当前的。学生不能在同一年,期限和部门不止一个候选人,所以这是针对他们,这样我可以批量删除它们。查询帮助 - 匹配阶段并返回最近的一个

我需要的代码,将只针对最高阶段添加。如果阶段相匹配,它会采取一个与最近的日期(hist_stage_dte)。我需要帮助。不胜感激。谢谢!

SELECT * 
FROM candidacy 
WHERE (candidacy.yr_cde = '2017') AND 
    (candidacy.trm_cde = '20') AND 
    (candidacy.div_cde like 'g%') and 
    (candidacy.CUR_CANDIDACY = 'n') and 
    (candidacy.ID_NUM in (SELECT candidacy.id_num  
          FROM candidacy 
          WHERE (candidacy.yr_cde = '2017') AND 
           (candidacy.trm_cde = '20') AND 
           (candidacy.div_cde like 'g%') 
          GROUP BY candidacy.id_num 
          HAVING count(candidacy.id_num) > 1)) 
+0

? MySQL的/ Postres/MSSQL/....?你需要它有一个以上的记录同样ID_NUM删除一切,只留下最近的一次? –

回答

1

尝试通过ROW_NUMBER函数拾取记录。要在where子句中使用行号,请进行第二个子查询。

SELECT * 
    FROM 
    (SELECT ROW_NUMBER() OVER (PARTITION BY ID_NUM ORDER BY hist_stage_dte DESC) as ROW_NUM, * 
    FROM candidacy 
    WHERE (candidacy.yr_cde = '2017') AND 
      (candidacy.trm_cde = '20') AND 
      (candidacy.div_cde like 'g%') and 
      (candidacy.CUR_CANDIDACY = 'n') and 
      (candidacy.ID_NUM in (SELECT candidacy.id_num  
           FROM candidacy 
           WHERE (candidacy.yr_cde = '2017') AND 
             (candidacy.trm_cde = '20') AND 
             (candidacy.div_cde like 'g%') 
           GROUP BY candidacy.id_num 
           HAVING count(candidacy.id_num) > 1)) 
    ) TB_AUX 
    WHERE ROW_NUM = 1 
什么是您使用SQL服务器
+0

谢谢!这非常有用。请问什么是TB_AUX?谢谢! – user8452670

+0

Hi @ user8452670,** TB_AUX **是动态表的**别名**。您可以使用任何其他名称作为别名。 –

+0

太感谢你了!这很好用! – user8452670