"time" "id", "parameter", "value" "2014-02-18 18:58:00", "1$SGP", "A", "415.7806091308594" "2014-02-18 18:58:00", "1$SGP", "B", "240.3373565673828" "2014-02-18 18:58:00", "2$SGP", "A", "393.191162109375" "2014-02-18 18:58:00", "2$SGP", "B", "50.10090637207031" "2014-02-18 18:58:00", "3$SGP", "E", "3484841472" "2014-02-18 18:05:01", "1$SGP", "A", "0" "2014-02-18 17:58:01", "1$SGP", "B", "0" "2014-02-18 17:58:01", "2$SGP", "C", "0" "2014-02-18 17:58:01", "2$SGP", "D", "0" "2014-02-18 17:58:01", "2$SGP", "E", "3061691904" "2014-02-18 17:57:01", "3$SGP", "A", "0" "2014-02-18 17:57:02", "3$SGP", "B", "0"
现在,从具有上述数据的表 Foo 来看,我需要将所有不同 ID 的参数“A”的值相加,这样对于特定 ID,它会从之间的最后一个时间戳中获取值18:00:00 和 19:00:00。考虑到时间和 id 字段都已建立索引,如何编写一个快速满足此要求的单个查询。
最佳答案
认为您会很困难,因为您想要按时间提取,但您正在为日期/时间字段建立索引。
但是像这样的事情应该可以做到:-
SELECT SUM(value)
FROM foo
INNER JOIN
(
SELECT id, MAX(`time`) AS maxtime
FROM foo
WHERE TIME(`time`) BETWEEN '18:00:00' AND '19:00:00'
AND parameter = 'A'
GROUP BY id
) sub1
ON foo.id = sub1.id
AND foo.`time` = sub1.maxtime
关于java - 无法形成单个 MySql 查询来对表中的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22640246/