我正在尝试执行这样的查询:
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;
并且它给了我“无效使用组功能”错误。我想要做的是找到最大计数器的日期,然后找到最小计数器的日期。任何帮助!!非常感谢..谢谢。
答案 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
请注意,这确实假设计数器是唯一的!