我有以下情况:
有一个表格,其中包含每个客户和产品每周和每月最后一天加载的数据。
我需要获取每个产品在当月最后一天加载的数据的数据总和(让我们说) - 为所有客户整合它。
输入是2个日期 - 期间的开始和结束,我需要在单个SQL查询中完成此操作。
以下是我正在使用的查询。期间是日期时间字段。
SELECT
Period
,sum([Amount]) as 'Amount'
from tableA
where Period between convert(datetime,'201110'+'01',121) and dateadd(second,-1,dateadd(month,1,convert(datetime,'201201'+'01',121)))
and cond1 = .....
and cond2 = ....
group by
Period
上面的查询会产生如下所示的数据。
我需要查看每个月最后一天的金额,即31-Oct-11,30-Nov-11,31-Dec-11等等。
最终结果应如下所示(与我目前所获得的相反 - 上面):
你能帮忙!!
答案 0 :(得分:4)
如果你只是想要在这个时期内每个月的最后一天的值,我认为添加这样的条件应该有效:
AND Period = DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, period) + 1, 0))
查询看起来像这样:
SELECT
Period,
SUM([Amount]) AS 'Amount'
FROM tableA
WHERE Period BETWEEN CONVERT(DATETIME,'201110'+'01',121) AND DATEADD(SECOND,-1,DATEADD(MONTH,1,CONVERT(DATETIME,'201201'+'01',121)))
AND Period = DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, period) + 1, 0))
AND cond1 = .....
AND cond2 = ....
GROUP BY Period
如果您的期间日期时间有时间值,则必须删除该部分才能与条件提供的最后一天日期匹配,如下所示:
AND DATEADD(dd, DATEDIFF(dd, 0, Period), 0) =
DATEADD(d, -1, DATEADD(m, DATEDIFF(m, 0, period) + 1, 0))