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

时间:2013-12-02 15:55:09

标签: sql db2

我需要在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中写这个,没有查询我发现有帮助我这个。

有什么想法吗? (我希望这可以通过简单的查询完成,而不是使用存储过程)

2 个答案:

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