我的数据安排如下:
obj_id quantity date 1 3 2014-05-06 2 2 2014-03-12 3 5 2014-10-07 4 7 2014-05-09 2 8 2014-12-31 1 5 2014-01-16 4 1 2014-07-26 3 2 2014-09-15 ...
我需要找到具有SUM(数量)>的OBJ_ID。 MAX超过RANGE天数。 在我的情况下,MAX为18,RANGE为31天。
换句话说,每个给定的OBJ_ID会不时收到QUANTITY(无论什么)。我需要找到总共超过18个的OBJ_ID以及这个OBJ_ID收到Qs的日期超过31天。 DOH。)
我想我需要在这里使用LAG,但不确定整个事情应该如何。
提前致谢。
答案 0 :(得分:1)
这可能需要一些调整,因为我没有时间对它进行适当的测试,但也许它会让你走上正确的轨道: (我以为你想要的是日期在过去31天内的记录)
SELECT SUM(quantity)
FROM tblTable
WHERE date between DATEADD(day, -RANGE, GETDATE()) and GETDATE()
HAVING SUM(quantity) > MAX
GROUP BY obj_id
答案 1 :(得分:1)
我目前正在测试我的同事迅速整理的解决方案:
SELECT A.*
FROM (
SELECT A.obj_id
, A.date
, A.in_month_date
, A.date - A.in_month_date AS in_month
, A.quantity
, A.in_month_quantity
FROM (
SELECT A.obj_id
, A.date
, FIRST_VALUE(A.date)
OVER (
PARTITION BY A.obj_id
ORDER BY A.date
RANGE BETWEEN 31 PRECEDING
AND CURRENT ROW
) AS in_month_date
, A.quantity
, SUM(A.quantity)
OVER (
PARTITION BY A.obj_id
ORDER BY A.date
RANGE BETWEEN 31 PRECEDING
AND CURRENT ROW
) AS in_month_quantity
FROM mytable A
) A
) A
WHERE A.in_month <= 31
AND A.in_month_quantity > 18