簡體   English   中英

Windows函數的正確語法

[英]Proper syntax for windows functions

我有以下查詢可與基表PS_GHS_HS_IMMUN一起正常工作,但是當我離開OUTER JOIN時,我得到很多重復,並且我想知道由於使用Windows函數而語法是否正確。

PS_GHS_HS_IMMUN和PS_JOB之間的鍵是EMPLID和EMPL_RCD,因此我不希望重復,除非我沒有正確設置查詢的格式。

SELECT A.EMPLID, A.EMPL_RCD, EXAM_DT, IMMUN_CODE, RN
FROM ( 
          SELECT ROW_NUMBER() OVER (PARTITION BY EMPLID, EXAM_DT, IMMUN_CODE ORDER BY EMPLID DESC) AS RN
            , EMPLID
            , EMPL_RCD
            , EXAM_DT
            , IMMUN_CODE
FROM PS_GHS_HS_IMMUN AS RN1 ) AS A
LEFT OUTER JOIN PS_JOB B ON A.EMPLID = B.EMPLID AND A.EMPL_RCD = B.EMPL_RCD 
WHERE A.RN = 1
GROUP BY A.EMPLID,A.EXAM_DT, A.IMMUN_CODE, A.EMPL_RCD, A.RN
ORDER BY A.EXAM_DT

只是尋找有關查詢語法是否格式錯誤的指導。

樣本數據:

EMPLID  EMPL_RCD    EXAM_DT                   IMMUN_CODE    RN
015     1           2018-09-19 00:00:00.000   FLDD          1
015     1           2018-09-19 00:00:00.000   FLDD          1
015     0           2018-09-19 00:00:00.000   FLDD          2
015     0           2018-09-20 00:00:00.000   PREV          1
015     1           2018-09-20 00:00:00.000   PREV          2
015     1           2018-09-20 00:00:00.000   PREV          2
015     1           2018-09-20 00:00:00.000   TDAB          1
015     1           2018-09-20 00:00:00.000   TDAB          1
015     0           2018-09-20 00:00:00.000   TDAB          2
015     0           2018-09-20 00:00:00.000   TSPS          1
015     1           2018-09-20 00:00:00.000   TSPS          2
015     1           2018-09-20 00:00:00.000   TSPS          2

您僅從第一張表中選擇列。 毫無疑問,第二張表中有重復的匹配項。

因為您是在子查詢中計算rn ,所以您將獲得“第一”行以及多個匹配項。

我懷疑您的意圖可能更多是從第二張表返回一行(這只是一個猜測):

SELECT ghi.EMPLID, ghi.EMPL_RCD, ghi.EXAM_DT, ghi.IMMUN_CODE
FROM PS_GHS_HS_IMMUN ghi LEFT OUTER JOIN
     (SELECT j.*,
             ROW_NUMBER() OVER (PARTITION BY j.EMPLID, j.EMPL_RCD ORDER BY ?) as seqnum  -- ? because I don't know which column
      FROM PS_JOB j
     ) 
     ON ghi.EMPLID = j.EMPLID AND ghi.EMPL_RCD = j.EMPL_RCD AND j.seqnum = 1
GROUP BY ghiEMPLID, ghi.EXAM_DT, ghi.IMMUN_CODE, ghi.EMPL_RCD
ORDER BY ghi.EXAM_DT;

GROUP BY對於此查詢不是必需的。 但是您正在構建的查詢可能需要它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM