如何从日期字段中仅按月分组(而不是按天分组)?

以下是"我的日期"字段的外观:

2012-05-01

以下是我目前的SQL:

select  Closing_Date, Category,  COUNT(Status)TotalCount from  MyTable
where Closing_Date >= '2012-02-01' and Closing_Date <= '2012-12-31'
and Defect_Status1 is not null
group by  Closing_Date, Category

推荐答案

我会用这个:

SELECT  Closing_Date = DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0), 
        Category,  
        COUNT(Status) TotalCount 
FROM    MyTable
WHERE   Closing_Date >= '2012-02-01' 
AND     Closing_Date <= '2012-12-31'
AND     Defect_Status1 IS NOT NULL
GROUP BY DATEADD(MONTH, DATEDIFF(MONTH, 0, Closing_Date), 0), Category;

这将在每个月的第一天分组,所以

`DATEADD(MONTH, DATEDIFF(MONTH, 0, '20130128'), 0)` 

我会给你'20130101'英镑.我通常更喜欢这种方法,因为它将日期作为日期.

或者,您可以使用以下内容:

SELECT  Closing_Year = DATEPART(YEAR, Closing_Date),
        Closing_Month = DATEPART(MONTH, Closing_Date),
        Category,  
        COUNT(Status) TotalCount 
FROM    MyTable
WHERE   Closing_Date >= '2012-02-01' 
AND     Closing_Date <= '2012-12-31'
AND     Defect_Status1 IS NOT NULL
GROUP BY DATEPART(YEAR, Closing_Date), DATEPART(MONTH, Closing_Date), Category;

这真的取决于你想要的输出是什么.(在您的示例中,结束年份不是必需的,但如果日期范围跨越年份边界,则可能是).

Sql相关问答推荐

基于列对多行求和的查询

GROUP BY与多个嵌套查询T—SQL

postgresql插入json不工作

当我们加入两个表时,我们可以省略GROUP BY中的列名吗?

在postgres中动态计算出现次数并插入到json中

我如何计算字母a出现的字符串的次数?

解析键-值对,根据值 Select ,并使用SQL创建新列

替换条件中的单元格值

如果多行科目有一行在指定的日期范围内,如何 Select 该科目在该日期之前的所有行?

Postgres SQL查询从字符串中获取邮箱地址

存储过程太慢

匹配 H[0-9][0-9] 但不匹配除字母 H 之外的任何字母

在 PostgreSQL 中,如何让多个判断约束引用相同的值数组?

如何使用最后一个非 NULL 值在 PostgreSQL 列中填充 NULL 值

识别SQL Server中的重复数字

Oracle PL/SQL长期运行问题

基于 Snowflake 的最大值创建新列

在 SQL 查询中创建滚动日期

如何在 SQL Server 中将 -13422.8450 舍入到 -13422.84

将单行中的多个行值转换为列