2017-05-30 61 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