SQL Server GROUP BY datetime忽略小时和带有日期和总和值的select


86

我有一个包含两个字段的表-datetimeint。我想datetime只在忽略小时和分钟的日期进行分组。该SELECT语句应返回一个映射到一天的int之和的日期。


1
接受其中一个答案会很好(只有提问者才能做到
Used_By_Already

Answers:


135
SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField
FROM MyTable
GROUP BY CAST(Datetimefield AS DATE)

11
这仅在SQL Server 2008+中有效(引入了Date数据类型时)。如果您使用的是2005年或更早的版本,则将转换更改为convert(convert(int,Datetimefield),datetime)应该可以。
德里克·克罗姆

我收到一条错误消息,提示“类型日期不是已定义的系统类型”。
史蒂文

5
@Steven-然后查看Derek的评论。这就是为什么在问题中包含VERSION是一个好主意的原因。
JNK

@Derek,这似乎不起作用。一个select convert(convert(int, getdate()), datetime)失败的错误语法错误
rabudde

1
抱歉,convert(datetime,convert(int,getdate()))
Derek Kromm 2011年

24

由于他没有指定使用的SQL Server版本(date2005年不提供该类型),因此也可以使用

SELECT CONVERT(VARCHAR(10),date_column,112),SUM(num_col) AS summed
FROM table_name
GROUP BY CONVERT(VARCHAR(10),date_column,112)

在较旧的版本(例如2000/2005)中,满足此需求的varchar转换比使用DATEADD(dd, DATEDIFF(dd, 0, date_field),0)
Used_By_Already

7

我来研究我必须要做的选择,但是,我相信我使用的方法是最简单的:

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;

1
它可以在任何版本的SQL Server中工作,并且比使用varchar转换要快。
Used_By_Already

您能说明什么是“ dd”吗?我不明白你应该在里面放什么。
BelovedFool

“ dd”是等于日期的日期部分。您还可以使用“ day”,“ d”或“ dd”
Jefferson Silva '18

3

-我喜欢这样,因为数据类型和格式与日期时间数据类型保持一致

;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

2

就我个人而言,我更喜欢格式功能,它使您可以非常轻松地更改日期部分。

     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;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.