我需要在DB2中创建一个查询,检索每个类别或组的最高X行。
具体来说,我有一组员工,每个员工都有一组价值观:
EMPLOYEE DATE NUM VAL
001 ... ..
001 26 0
001 27 15
001 28 0
003 01 44
003 ... ..
003 07 0
每位员工都有几行(7的倍数 - 它们是天数)和值。
我想要做的是获取7的最后(最高)倍数的值(在员工#1中这将是22-28,对于员工#2,它将是1-7)。
我的查询是检查上周员工为= 0的所有值。
我在DB2中写这个,没有查询我发现有帮助我这个。
有什么想法吗? (我希望这可以通过简单的查询完成,而不是使用存储过程)
答案 0 :(得分:0)
试试这个:
WITH tbl AS (
SELECT employee, date_num, val,
row_number() over(PARTITION BY employee ORDER BY date_num DESC) idx
FROM t
)
SELECT employee, date_num, val FROM tbl
WHERE idx = 1
非CTE和非窗口函数方法是:
SELECT t1.* FROM t t1
JOIN (
SELECT employee, max(date_num) date_num FROM t
GROUP BY employee
) t2
ON t1.employee = t2.employee AND t1.date_num = t2.date_num
答案 1 :(得分:0)
您可以使用窗口功能执行此操作。在过去的七天里,这有点棘手。这是一种方法:
select e.*
from (select e.*,
dense_rank() over (partition by employee order by floor((datenum - 1)/7) desc) as seqnum
from employee e
) e
where seqnum = 1;
表达式floor((datenum - 1)/7)
将行划分为七个组,最大的7个值的值为1.