SQL 查询帮助获取每月值
Posted
技术标签:
【中文标题】SQL 查询帮助获取每月值【英文标题】:SQL Query help getting monthly values 【发布时间】:2015-09-16 14:27:16 【问题描述】:我有一个查询,它基本上根据几个条件对当前月份的一列求和。我想获得每个月的价值,但似乎无法理解它。
DECLARE @d1 DATETIME = DATEADD(mm, DATEDIFF(mm, 0, GETDATE()),0);
DECLARE @d2 DATETIME = DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0);
SELECT sum(SUMCOL) as Total
FROM COVERAGE
where
(COVERAGE_START_DATE>=@d1 and COVERAGE_START_DATE< @d2 and not PROCESSED_DATE>=@d2) or
(COVERAGE_START_DATE< @d1 and PROCESSED_DATE>=@d1 and PROCESSED_DATE<@d2)
我只是想得到月份
SELECT MONTH(PROCESSED_DATE)MONTH, sum(SUMCOL) as Total
然后按月分组…………
GROUP BY MONTH(COVERAGE_START_DATE)
但后来意识到这不会,因为我也需要处理 PROCESSED_DATE 列并且也无法获取额外的逻辑。
无论如何,我希望能得到一些帮助。显然 SQL 查询不是我的事 :) 必须有一种更有效(和正确)的方法,但我似乎无法理解它。
【问题讨论】:
这将是一个很好的起点。 spaghettidba.com/2015/04/24/… 【参考方案1】:使用HAVING
子句。
SELECT MONTH(PROCESSD_DATE) AS MONTH, SUM(SUMCOL) AS Total
FROM COVERAGE
GROUP BY MONTH(PROCESSD_DATE)
HAVING ((COVERAGE_START_DATE BETWEEN @d1 AND @d2) AND PROCESSED_DATE <= @d2)
OR (COVERAGE_START_DATE < @d1 AND (PROCESSED_DATE BETWEEN @d1 AND @d2))
【讨论】:
使用上面的例子,我该如何解决 -- HAVING 子句中的“COV.Coverage_Start_Date”列无效,因为它既不包含在聚合函数也不包含在 GROUP BY 子句中。并且列 'COV.Processed_Date' 在 HAVING 子句中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。抱歉,我刚刚开始学习其中的一些内容。以上是关于SQL 查询帮助获取每月值的主要内容,如果未能解决你的问题,请参考以下文章