SQL-DB2-每个组的最高倍数

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 ...

我需要在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的最后(最高)倍数的值(在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
,对吗?