[英]How to get single closest value for each column type in DB2
I have this query: 我有这个查询:
SELECT * FROM TABLE1 WHERE KEY_COLUMN='NJCRF' AND TYPE_COLUMN IN ('SCORE1', 'SCORE2', 'SCORE3') AND DATE_EFFECTIVE_COLUMN<='2016-09-17'
I get about 12 record(rows) as result. 我得到大约12条记录(行)作为结果。
How to get result closest to DATE_EFFECTIVE_COLUMN for each TYPE_COLUMN? 如何获得每个TYPE_COLUMN最接近DATE_EFFECTIVE_COLUMN的结果? In this case, how to get three records, for each type, that are closest to effective date?
在这种情况下,如何为每种类型获取最接近生效日期的三个记录?
UPDATE: I could use TOP if I had to go over only single type, but I have three at this moment and for each of them I need to get closest time result. 更新:如果我只需要检查单个类型,则可以使用TOP,但是此刻我有3个,对于每个它们,我都需要获得最接近的时间结果。
Hope I made it clear, let me know if you need more info. 希望我能说清楚,如果您需要更多信息,请告诉我。
If I understand correctly, you can use ROW_NUMBER()
: 如果我理解正确,则可以使用
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;
If you want three records per type , just use seqnum <= 3
. 如果每种类型需要三个记录 ,则只需使用
seqnum <= 3
。
I like ROW_NUMBER()
for this. 我喜欢
ROW_NUMBER()
。 You want to partition by TYPE
, which will start the row count over for each type, then order by DATE_EFFECTIVE desc
, and take only the highest date (the first row): 您
DATE_EFFECTIVE desc
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.