有什么方法可以使用CASE但不能使用MAX来获取我想要的值吗? 我当前的查询是这样的
SELECT
ROUND(MAX(CASE WHEN id = '1' THEN value END),2) Val1,
ROUND(MAX(CASE WHEN id = '2' THEN value END),2) Val2,
ROUND(MAX(CASE WHEN id = '3' THEN value END),2) Val3
FROM table
WHERE id IN ("1", "2", "3") and
t_stamp BETWEEN "2014-10-25" AND "2014-10-25"
GROUP BY DATE(t_stamp), HOUR(t_stamp), MINUTE(t_stamp) DIV 15
如果我能得到那些时间的实际值而不是MAX值,那将是很好的。
我尝试删除MAX,但所有输出都变为NULL
SELECT
ROUND((CASE WHEN id = '1' THEN value END),2) Val1,
ROUND((CASE WHEN id = '2' THEN value END),2) Val2,
ROUND((CASE WHEN id = '3' THEN value END),2) Val3
FROM table
WHERE id IN ("1", "2", "3") and
t_stamp BETWEEN "2014-10-25" AND "2014-10-25"
GROUP BY DATE(t_stamp), HOUR(t_stamp), MINUTE(t_stamp) DIV 15
我该怎么做?感谢您的帮助!
答案 0 :(得分:1)
这里的问题是,MySQL真的让你做一些它不应该做的事情。
在标准SQL中,如果您有GROUP BY子句,则SELECT子句中的每个元素都必须符合以下两个类别之一:
1)它的聚合函数MAX,SUM,COUNT等。 2)它也在GROUP BY子句中命名。
您所看到的问题是,当您没有" MAX"时,MySQL会从任意行中选择一个值。
在此处详细了解此(可怕)行为:http://dev.mysql.com/doc/refman/5.6/en/group-by-handling.html
我为您创建了这个SQLFiddle:http://sqlfiddle.com/#!2/c17f6/4
当有多个"值时,您在寻找什么行为"在相同ID的相同15分钟时间范围内?我的猜测是你想要MAX,AVG,SUM或FIRST