use*_*794 2 sql sql-server datetime group-by
使用SQL Server,我有一个表,CreatedAt
其中包含一个具有datetime
数据类型的列.我正在尝试编写一个查询,该查询将返回每个日期的总记录,但也会将日期分为一天中的时间,即上午,下午和晚上.因此,例如,下表
ID createdAt
------------------------------
1 2017-10-17 21:31:52.160
2 2017-10-17 12:12:12.160
3 2017-10-17 09:09:09.160
4 2017-10-17 21:31:52.160
5 2017-10-16 21:31:52.160
Run Code Online (Sandbox Code Playgroud)
会返回以下结果
DayCounter SessionDay Morning Afternoon Evening
4 2017-10-17 1 1 2
1 2017-10-16 0 0 1
Run Code Online (Sandbox Code Playgroud)
我有以下两个查询按天分组数据,然后拆分从日期中提取时间,但我无法弄清楚如何将它们放在一起.
SELECT
COUNT(createdAt) AS counter,
CONVERT(DATE, createdAt) AS sessionDay
FROM
MyTable
GROUP BY
CONVERT(DATE, createdAt)
Run Code Online (Sandbox Code Playgroud)
和
SELECT
CASE
WHEN CAST(CONVERT(CHAR(2), createdAt, 108) AS INT) < 12
THEN 'Morning'
WHEN CAST(CONVERT(CHAR(2), createdAt, 108) AS INT) < 17
THEN 'Afternoon'
ELSE 'Evening'
END AS sessionPeriod,
createdAt
FROM
MyTable
Run Code Online (Sandbox Code Playgroud)
您似乎想要条件聚合,以及更清楚地使用日期/时间函数:
select cast(createdAt as date),
sum(case when datepart(hour, createdat) < 12 then 1 else 0 end) as Morning,
sum(case when datepart(hour, createdat) >= 12 and datepart(hour, createdat) < 17 then 1 else 0 end) as Afternoon,
sum(case when datepart(hour, createdat) >= 17 then 1 else 0 end) as Evening
from mytable
group by cast(createdAt as date)
order by cast(createdAt as date);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
496 次 |
最近记录: |