java - 无法形成单个 MySql 查询来对表中的值求和

标签 java mysql mysql-5.5

"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/

相关文章:

java - 如何向已注册的用户名发送对话框

mysql - mysql服务器5.6和mysql(客户端)5.5完全兼容吗?

java - 冰雹序列 (Java)

mysql - 无法在 MYSQL 中为阿拉伯文本创建全文索引

php - 如何使用 GET 解析 id 到另一个页面

mysqldump:错误 2020:转储表时得到大于 'max_allowed_packet' 字节的数据包

mysql 复制 View 不起作用

mysql-5.5 - SQL 查询和 COUNT 的困难

java - 为什么 Wrapper Classes 没有类似于 Stringpool 的池?

java - json 到 java 对象自定义解析器