2017-08-11 63 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