2017-05-30 45 views
0

每列類型獲得單最接近的值我有此查詢:如何在DB2

SELECT * FROM TABLE1 WHERE KEY_COLUMN='NJCRF' AND TYPE_COLUMN IN ('SCORE1', 'SCORE2', 'SCORE3') AND DATE_EFFECTIVE_COLUMN<='2016-09-17' 

我得到約12記錄(行)的結果。

如何獲得每個TYPE_COLUMN最接近DATE_EFFECTIVE_COLUMN的結果?在這種情況下,如何爲每種類型獲取最接近生效日期的三條記錄?

更新:我可以使用TOP,如果我不得不只去單一類型,但我有三個在這一刻,併爲他們每個人我需要得到最接近的時間結果。

希望我明確了,讓我知道你是否需要更多信息。

+0

的可能的複製[查找SQL最接近的日期服務器](https://stackoverflow.com/questions/14023145/find-closest-date-in-sql-server) –

+0

@JacobH更新的問題。 – Foxy

+0

最近沒有去過嗎? – xQbert

回答

1

如果我理解正確的話,你可以使用ROW_NUMBER()

SELECT t.* 
FROM (SELECT t.*, 
      ROW_NUMBER() OVER (PARTITION BY TYPE_COLUMN ORDER BY DATE_EFFECTIVE_COLUMN DESC) as seqnum 
     FROM TABLE1 t 
     WHERE KEY_COLUMN = 'NJCRF' AND 
      TYPE_COLUMN IN ('SCORE1', 'SCORE2', 'SCORE3') AND 
      DATE_EFFECTIVE_COLUMN <= '2016-09-17' 
    ) t 
WHERE seqnum = 1; 

如果你想三個記錄每類型,只需使用seqnum <= 3

1

我喜歡ROW_NUMBER()。您想在TYPE,這將開始行劃分由DATE_EFFECTIVE desc計數結束對每種類型,再下訂單,並採取只有最高日(第一行):

SELECT * 
FROM (
    SELECT *, 
     ROW_NUMBER() over (PARTITION BY TYPE_COLUMN ORDER BY DATE_EFFECTIVE_COLUMN desc) RN 
    FROM TABLE1 
    WHERE KEY_COLUMN = 'NJCRF' 
    AND TYPE_COLUMN IN ('SCORE1', 'SCORE2', 'SCORE3') 
    AND DATE_EFFECTIVE_COLUMN <= '2016-09-17' 
    ) A 
WHERE RN = 1