Group by 和 DateAdd 以及简单的计算 SQL 服务器

Group by and DateAdd and simple computations SQL Server

这是我的table和查询

Table 1

AsOfDate                  Value
2015-06-06 11:08:21.247     5 
2015-06-06 12:08:21.247     7 
2015-06-07 10:08:21.247     8 
2015-06-08 11:08:21.247     8      
2015-06-08 10:09:21.247     9 

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, [AsOfDate])) as DateOnly ,Min([Value])
FROM Table1 group by DateOnly

我收到一条错误消息 "Invalid column name 'DateOnly'."

完成它的最佳方法是什么?

你必须group by DATEADD(dd, 0, DATEDIFF(dd, 0, [AsOfDate]))。很遗憾,您不能在 group by 子句中使用别名。

将您的查询更改为:

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, [AsOfDate])) as DateOnly ,Min([Value])
FROM Table1 group by DateOnly

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, [AsOfDate])) as DateOnly ,Min([Value])
FROM Table1 group by DATEADD(dd, 0, DATEDIFF(dd, 0, [AsOfDate]))

别名 DateOnly 为查询级别所知(仅在其顶部)

这里DateOnly是列别名。所以在 GROUP BY 中使用表达式本身 like

SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, [AsOfDate])) as DateOnly ,Min([Value])
FROM Table1 
group by DATEADD(dd, 0, DATEDIFF(dd, 0, [AsOfDate]))

您使用了不正确的方法从 datetime 数据中截取时间部分。如果您使用支持 date 数据类型的 SQL 服务器版本,只需使用 CAST(AsOfDate as date) 或者您可以使用:CAST(CAST(AsOfDate as int) as datetime)

所以查询可以是这样的:

SELECT CAST(AsOfDate as date) as DateOnly ,Min([Value])
FROM Table1
GROUP BY CAST(AsOfDate as date)