sql - 使用 SQL 按周分组

标签 sql tsql

我有以下几点:

http://sqlfiddle.com/#!6/226ae/1

我现在尝试为一年中的每一周添加一行,并相应地过滤联系人。 CONTACTS 有一个日期时间列。新表将如下所示:

        Status 1    Status 2    Status 3
Week 1      3          4           2
Week 2      1          5           3
Week 3      2          2           4

我认为需要使用 DATEADD,但是我不知道如何开始更改我的查询。

我知道 MySQL 有一个 GROUP BY WEEK 命令,但我认为 SQL 没有等价物。实现这一目标的最佳方法是什么?

最佳答案

您可以使用 DATEPART() ,如果您拥有跨越多年的数据,则按周和年分组:

SELECT 
    'Week ' + cast(datepart(wk, created) as varchar(2)) Week,
    SUM(case WHEN status = 1 then 1 else 0 end) Status1,
    SUM(case WHEN status = 2 then 1 else 0 end) Status2,
    SUM(case WHEN status = 3 then 1 else 0 end) Status3,
    SUM(case WHEN status = 4 then 1 else 0 end) Status4,
    SUM(case WHEN status = 5 then 1 else 0 end) Status5
FROM contacts
group by datepart(wk, created), year(created)

SQL Fiddle with Demo

将年份添加到最终结果中:
SELECT 
    'Week ' + cast(datepart(wk, created) as varchar(2)) Week,
    year(created) year,
    SUM(case WHEN status = 1 then 1 else 0 end) Status1,
    SUM(case WHEN status = 2 then 1 else 0 end) Status2,
    SUM(case WHEN status = 3 then 1 else 0 end) Status3,
    SUM(case WHEN status = 4 then 1 else 0 end) Status4,
    SUM(case WHEN status = 5 then 1 else 0 end) Status5
FROM contacts
group by  datepart(wk, created), year(created)

SQL Fiddle with demo

关于sql - 使用 SQL 按周分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13278552/

相关文章:

mysql - 为什么 LIMIT 运算符不能正常工作?

Java Spring SQL如何将3个表组合/连接成一个

sql - 如何根据条件生成列的范围

sql - 检查日期时间是否为当前日期

sql - 如何减少简单选择查询的响应时间?

mysql - 基于 'IN' 顺序的订单值 - MySQL

sql - MySQL "Sending data"非常慢

sql - 从参数动态 SQL 查询

sql - T-SQL 中的加权平均值(如 Excel 的 SUMPRODUCT)

使用带有动态数据的 "IN"关键字的 SQL 语法问题