无效使用组函数错误来提取最大值和最小值的日期

时间:2013-06-19 15:31:36

标签: mysql grouping max min

我正在尝试执行这样的查询:

SELECT MAX(counter), MIN(counter) ,
       my_date IN (SELECT my_date FROM my_table WHERE counter = MAX(counter) )  AS max_Date ,
       my_date IN (SELECT my_date FROM my_table WHERE counter = MIN(counter) ) AS min_Date 
FROM my_table;

并且它给了我“无效使用组功能”错误。我想要做的是找到最大计数器的日期,然后找到最小计数器的日期。任何帮助!!非常感谢..谢谢。

3 个答案:

答案 0 :(得分:2)

您尝试逐行使用聚合函数的结果(max()/ min()),但在DB扫描整个表之前,这些结果不可用。

e.g。这是鸡和蛋的问题。你需要数鸡,但生产鸡的鸡蛋还没有铺设。

这就是为什么有HAVING个子句,它允许你使用聚合函数的结果来进行过滤。

尝试使用子查询:

SELECT my_date FROM my_table HAVING counter = MIN(counter) 
                             ^^^^^^

答案 1 :(得分:1)

您可以使用group_concat()substring_index()的技巧获取显示最大和最小计数器值的日期:

SELECT MAX(counter), MIN(counter) ,
       substring_index(group_concat(my_date order by counter desc), ',', 1) as max_date,
       substring_index(group_concat(my_date order by counter), ',', 1) as min_date
FROM my_table;

注意:您可能希望首先根据自己的喜好格式化日期。

您也可以通过加入来完成此操作。

您的查询存在问题:

where counter = min(counter)

您不能在where子句中包含聚合函数,因为两者都是指子查询中的表。你可以使用aliaes做到这一点,但为什么要这么麻烦?还有其他方法可以编写查询。

答案 2 :(得分:0)

您需要一个子选择来获取最大和最小计数器,然后多次连接到表中以从这些行中获取其他值。

SELECT MaxCounter, MinCounter, a.my_date, b.my_date
FROM (SELECT MAX(counter) AS MaxCounter, MIN(counter) AS MinCounter 
FROM my_table) Sub1
INNER JOIN my_table a ON Sub1.MaxCounter
INNER JOIN my_table b ON Sub1.MinCounter

请注意,这确实假设计数器是唯一的!