假设我的表模式类似于下面(它只是一个简化的示例):
MyTable (table name)
ID - int (unique, auto increment)
Message - string
Timestamp - Datetime--我想选择ID的数量,按消息分组,然后按时间戳对它们进行排序,所以我将这样做:
SELECT count (ID), Message FROM MyTable
GROUP BY (Message)
ORDER BY Timestamp desc但是,Server管理演播室会抛出此错误:
Column 'Timestamp ' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.问题是,如果我在grouping中添加了带有消息的时间戳,那么它就会破坏我的分组。在聚合函数中放置时间戳的另一项建议没有意义(按顺序排列,计数(时间戳)并不意味着什么.)
知道怎么做吗?
非常感谢!
发布于 2011-07-13 23:56:36
假设同一条消息多次出现在您的表中:
1|the mackerel likes frying|1/1/1917
2|at night all cats are grey|12/15/1956
3|the mackerel likes frying|2/2/1918并且要按消息字符串进行分组,计算消息出现在表中的次数:
the mackerel likes frying|2
at night all cats are grey|1时间戳列不是聚合(也就是分组)的一部分,而是详细信息行的一部分。它不能出现在分组中,因为时间戳不是" It“(单数),而是时间戳,它们是复数的。上面的示例中有两个不同的时间标记用于mackerel消息。你会选哪一个?查询如何知道它是哪一个?您所拥有的只有聚合函数:
min(timestamp)
max(timestamp)
count(timestamp)如果它不是一个日期时间,您也会有AVG(时间戳)。
发布于 2011-07-13 23:52:03
找这样的东西?
SELECT Message, count (ID), max(Timestamp) as maxDate FROM MyTable
GROUP BY (Message)
ORDER BY maxDate desc发布于 2011-07-13 23:53:04
当您进行聚合时,您是基于某些条件将行合并在一起的。这意味着结果集中的每一行实际上表示原始数据中的多个行。
当您想要ORDER BY Timestamp时,结果集中的每一行都会有多个 timestamp值,因为其中的每一行代表几行数据。
因此,您需要决定每组需要哪个timestamp。MAX?MIN?您还需要聚合该字段以获得准确或有意义的结果。
https://stackoverflow.com/questions/6686991
复制相似问题