SQL-DB2-每个组的最高倍数
我需要在DB2中创建一个查询,为每个类别或组检索最高的X行 具体而言,我有一组员工,每个员工都有一组价值观:SQL-DB2-每个组的最高倍数,sql,db2,Sql,Db2,我需要在DB2中创建一个查询,为每个类别或组检索最高的X行 具体而言,我有一组员工,每个员工都有一组价值观: EMPLOYEE DATE NUM VAL 001 ... .. 001 26 0 001 27 15 001 28 0 003 01 44 003 ...
EMPLOYEE DATE NUM VAL
001 ... ..
001 26 0
001 27 15
001 28 0
003 01 44
003 ... ..
003 07 0
每个员工将有几行(7的倍数-它们是天)和一个值
我要做的是获取7的最后(最高)倍数的值(在employee#1中为22-28,在employee#2中为1-7)
我的查询是检查员工在上周的所有值是否为be=0
我是在DB2中写这篇文章的,我发现没有任何查询可以帮助我解决这个问题
有什么想法吗?(我希望这可以通过一个简单的查询而不是使用存储过程来完成)尝试一下:
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
您可以使用窗口函数来实现这一点。这是一个有点棘手的得到最后七天。以下是一种方法:
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。结果中没有22
,但我知道您只是希望返回28
,对吗?