【发布时间】:2016-02-04 21:51:17
【问题描述】:
我想对从 SQL 2012 数据库返回的一些数据进行分组,我需要弄清楚如何按一定数量的字段进行分组。
以下 SQL 工作正常
SELECT MessageId, SearchedString, COUNT(SearchedString) AS [SearchedStringCount], MAX(percentage) AS TopPercent
from (
select MessageId, SearchedString, Percentage
from table
where MessageId = '15'
) T
GROUP BY MessageId, SearchedString
但只要我在选择中添加另一个字段,SQL 就会要求将其包含在 group by 中,这不是我需要的。
如何在不包含在 Group By 中的情况下向上述 SQL 添加另一个字段?
理想情况下,我希望包含一个 Date 值,如下所示:
select MessageId, SearchedString, COUNT(SearchedString) AS [SearchedStringCount], MAX(percentage) AS TopPercent, CAST(ScreenedDate AS DATE) AS DateScreened
from (
select MessageId, SearchedString, Percentage, ScreenedDate
from table
where MessageId = '15'
) T
GROUP BY MessageId, SearchedString
【问题讨论】:
-
假设同一个
(MessageId, SearchedString)分组有多个ScreenedDate...服务器应该返回哪个日期? -
嗨,Matteo,每条筛选消息都有一个日期。我将日期转换为删除所有毫秒,这样它们的日期实际上是相同的。
-
那么您实际上可以将其添加到 group by 子句中而不会产生附带影响,同时遵守 SQL 标准......或者按照建议使用聚合函数。
标签: sql sql-server group-by