我今天测试了很多,谷歌搜索得像地狱,但dint让它工作。我想查询我的数据库,并希望在一周工作日等时间恢复最高(最高值)。
表包含
date time id val1 val2 val3
2014-02-11 09:20:05 1 0.5 0.1 0.4
2014-02-11 09:20:10 2 0.4 0.2 0.14
2014-02-11 09:20:15 3 0.7 0.4 1.7
2014-02-11 09:20:20 4 0.4 0.4 4.7
2014-02-11 09:20:25 5 0.6 0.8 8.7
2014-02-11 09:20:30 6 5.4 0.1 8.7
2014-02-11 09:20:35 7 0.9 0.8 1.5
2014-02-11 09:20:40 8 0.1 0.6 8.3
2014-02-11 09:20:45 9 0.5 0.8 4.7
2014-02-11 09:20:50 10 0.8 0.9 7.7
2014-03-24 14:30:15 656931 0.4 0.6 2.4 <- last row
知道我想获得每分钟的最大值val1
date time maxval1
2014-02-11 09:21 5.4
2014-02-11 09:22 1.1
2014-02-11 09:23 3.9
2014-02-11 09:24 4.8
2014-02-11 09:25 7.7
2014-02-11 09:26 8.5
2014-02-11 09:27 9.4...
接下来我想得到每小时最大值val1
date time maxval1
2014-02-11 09:00 5.4
2014-02-11 10:00 1.1
2014-02-11 11:00 3.9
2014-02-11 12:00 4.8
2014-02-11 13:00 7.7
2014-02-11 14:00 8.5
2014-02-11 15:00 9.4...
天
2014-02-11 1.2
2014-02-12 4.4
2014-02-13 9.9
2014-02-14 6.4
2014-02-15 9.6
2014-02-16 4.7
2014-02-17 5.4...
月
2014-02 9.9
2014-03 4.4
2014-04 9.9
2014-05 9.4
2014-06 7.6
2014-07 6.7
2014-08 3.4...
最好是输出时间是unixtime(用于制图)
我已经为你编辑了这个问题
答案 0 :(得分:0)
您要求“一周工作日等”的最大值我担心这是一个模糊的规范。
您可以像这样获得每天的最大值:
SELECT date AS day,
MAX(value1) AS maxval1
FROM testdb
GROUP BY date
ORDER BY date
如果您有一个DATETIME列而不是单独的日期和时间列,那么整个过程会更容易,也更快。
您可以像这样获得每小时的最大值:
SELECT DATE_FORMAT(STR_TO_DATE(CONCAT(date,' ',time)), '%Y-%m-&d %H:00:00') AS hour,
MAX(value1) AS maxval1
FROM testdb
GROUP BY DATE_FORMAT(STR_TO_DATE(CONCAT(date,' ',time)), '%Y-%m-&d %H:00:00')
ORDER BY DATE_FORMAT(STR_TO_DATE(CONCAT(date,' ',time)), '%Y-%m-&d %H:00:00')
在此查询中使用表达式
DATE_FORMAT(STR_TO_DATE(CONCAT(date,' ',time)), '%Y-%m-&d %H:00:00')
采用日期/时间组合并将其截断到最近一小时的顶部。例如,它将“2013-04-01 08:35:20”更改为“2013-04-01 08:00:00”
类似的表达式可以将时间戳截断为其他内容,例如一周(上周日午夜)或最近的四分之一小时。这是一些背景知识。 http://www.plumislandmedia.net/mysql/sql-reporting-time-intervals/