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)慢。
接受其中一个答案会更好(只有询问者可以这样做)