Sql server SQL Server GROUP BY datetime ignore hour minute和带有日期和总和值的select

Sql server SQL Server GROUP BY datetime ignore hour minute和带有日期和总和值的select,sql-server,datetime,select,group-by,Sql Server,Datetime,Select,Group By,我有一个包含两个字段的表-datetime和int。我想在datetime上只在日期上进行分组,忽略小时和分钟。SELECT语句应返回一个日期,该日期映射为一天的整数之和。由于他没有指定使用哪个版本的SQL server(date类型在2005年不可用),因此也可以使用 SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField FROM MyTable GROUP BY CAST(Datetimefiel

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

由于他没有指定使用哪个版本的SQL server(
date
类型在2005年不可用),因此也可以使用

SELECT CAST(Datetimefield AS DATE) as DateField, SUM(intfield) as SumField
FROM MyTable
GROUP BY CAST(Datetimefield AS DATE)
SELECT CONVERT(VARCHAR(10),date_column,112),SUM(num_col) AS summed
FROM table_name
GROUP BY CONVERT(VARCHAR(10),date_column,112)
--我喜欢这样的数据类型,并且格式与日期时间数据类型保持一致

;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

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

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;

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

     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;

这仅适用于SQL Server 2008+(引入日期数据类型时)。如果您是在2005年或更早的时候,将强制转换更改为convert(convert(int,DATETIMEFILD),datetime)应该可以。我收到一个错误,说“类型Date不是已定义的系统类型”。@Steven-请参阅Derek的评论。这就是为什么在问题中包含你的版本是个好主意。@Derek这似乎不起作用。A
选择convert(convert(int,getdate()),datetime)
失败,语法错误对不起,convert(datetime,convert(int,getdate()))这将在任何版本的SQL Server中运行,并且比使用varchar转换更快。您能否澄清什么是“dd”?我不明白你应该在里面放什么。“dd”是datepart相当于day。您也可以在旧版本(如2000/2005)中使用“day”、“d”或“dd”,因为这种需要比使用
DATEADD(dd,DATEDIFF(dd,0,date\u字段),0)慢。
接受其中一个答案会更好(只有询问者可以这样做)