【发布时间】:2014-03-11 21:43:03
【问题描述】:
我使用的是 MSSQL 2008 R2,遇到以下情况:
通过以下查询,我将获得我期望的数据(每个日期的 max 和 min 速度)。
CAST(m.date as DATE) 删除了我的datetime 的时间部分
SELECT CAST(d.date as DATE) as date,
MAX(d.speed) AS maxSpeed,
AVG(d.speed) AS avgSpeed
FROM Driver as d
WHERE d.date between '2014-01-01 09:00:00.491' and
'2014-03-11 17:00:00.491'
GROUP BY CAST(d.date as DATE)
ORDER BY date DESC
我的问题是,我还想从 d 中选择一些其他字段(例如用户 ID、用户名等)。如果我修改查询以包含其他字段,如下所示:
SELECT CAST(d.date as DATE) as date,
MAX(d.speed) AS maxSpeed,
AVG(d.speed) AS avgSpeed,
d.userId
FROM Driver as d
WHERE d.date between '2014-01-01 09:00:00.491' and
'2014-03-11 17:00:00.491'
GROUP BY CAST(d.date as DATE)
ORDER BY date DESC
我收到此错误:
d.userId is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
因此,我将d.userId 添加到GROUP BY 子句中,我的数据当然会发生变化,现在每个日期将包含多个条目。
所以,我的问题是如何选择其他字段,同时仍保留我想要的原始数据(每个唯一日期的 min 和 max)?
【问题讨论】:
-
在任何给定日期您想要
userid的哪个值?大概不止一个。 -
这是一个很好的观点。我想我一直在错误地概念化这一点。
标签: sql sql-server jpa ebean