【发布时间】:2011-11-17 00:53:15
【问题描述】:
我有一个包含两个字段的表格 - datetime 和 int。我只想在忽略小时和分钟的日期对datetime 进行分组。 SELECT 语句应该返回一个日期,该日期映射到一天的 int 总和。
【问题讨论】:
-
接受其中一个答案会很好(只有提问者可以这样做)
标签: sql-server datetime select group-by
我有一个包含两个字段的表格 - datetime 和 int。我只想在忽略小时和分钟的日期对datetime 进行分组。 SELECT 语句应该返回一个日期,该日期映射到一天的 int 总和。
【问题讨论】:
标签: sql-server datetime select group-by
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField
FROM MyTable
GROUP BY CAST(Datetimefield AS DATE)
【讨论】:
select convert(convert(int, getdate()), datetime) 因语法错误而失败
由于他没有具体说明他使用的是哪个版本的 SQL 服务器(date 类型在 2005 年不可用),所以也可以使用
SELECT CONVERT(VARCHAR(10),date_column,112),SUM(num_col) AS summed
FROM table_name
GROUP BY CONVERT(VARCHAR(10),date_column,112)
【讨论】:
DATEADD(dd, DATEDIFF(dd, 0, date_field),0) 慢
我来研究我必须这样做的选项,但是,我相信我使用的方法是最简单的:
SELECT COUNT(*),
DATEADD(dd, DATEDIFF(dd, 0, date_field),0) as dtgroup
FROM TABLE
GROUP BY DATEADD(dd, DATEDIFF(dd, 0, date_field),0)
ORDER BY dtgroup ASC;
【讨论】:
-- 我喜欢这个作为数据类型,格式与日期时间数据类型保持一致
;with cte as(
select
cast(utcdate as date) UtcDay, DATEPART(hour, utcdate) UtcHour, count(*) as Counts
from dbo.mytable cd
where utcdate between '2014-01-14' and '2014-01-15'
group by
cast(utcdate as date), DATEPART(hour, utcdate)
)
select dateadd(hour, utchour, cast(utcday as datetime)) as UTCDateHour, Counts
from cte
【讨论】:
我个人更喜欢格式功能,让你可以很容易地简单地更改日期部分。
declare @format varchar(100) = 'yyyy/MM/dd'
select
format(the_date,@format),
sum(myfield)
from mytable
group by format(the_date,@format)
order by format(the_date,@format) desc;
【讨论】: