我正在处理烛台图表数据。我有一个带
的数据库表(MySql)created value
2017-09-25 17:55:04 3322.09
2017-09-25 18:00:03 3317.49
2017-09-25 18:05:02 3316.12
2017-09-25 18:10:03 3325.16
2017-09-25 18:15:04 3326.01
2017-09-25 18:20:03 3330.49
2017-09-25 18:25:04 3331.49
2017-09-25 18:30:04 3335.24
2017-09-25 18:35:03 3347.13
2017-09-25 18:40:03 3343.21
2017-09-25 18:45:05 3341.78
2017-09-25 18:50:03 3339.64
2017-09-25 18:55:04 3336.12
2017-09-25 19:00:04 3327.73
2017-09-25 19:05:03 3327.96
2017-09-25 19:10:04 3325.93
我试图在任何时间段(例如15分钟或每4小时,每6天等)选择最大值,最小值,开放值,近似值。
到目前为止我已经
了SELECT p.created, HOUR(`DATE`), MAX(p.value), MIN(p.value)
FROM price
GROUP BY DATE(`DATE`),HOUR(`DATE`)
没那么复杂。它给了我每小时的最大值和最小值,因此对于分钟和“完整”时段,如天,周,月,我可以使用MONTH,DAY等功能。
任何想法如何构建任何时间段的查询,比方说28分钟或31小时等?此外,这适用于最大值和最小值,但我还需要一个开始值(第一个)用于时间段和接近值(最后一个)。
答案 0 :(得分:3)
要在任意时间段进行分组,您可以获取library(dplyr)
mtcars %>%
mutate(type = factor(carb)) %>%
ggplot(aes(mpg, cyl)) %>%
format_cust()
列的UNIX时间值(即自UNIX纪元以来的秒数)并除以所需期间的大小,仅取结果商的整数部分(并丢弃余数)。所以,每28分钟分组一次:
created
您会注意到我还选择了SELECT FROM_UNIXTIME(28*60 * (UNIX_TIMESTAMP(created) DIV (28*60))) grp_id
MIN(value) min_value,
MAX(value) max_value,
MIN(created) min_created,
MAX(created) max_created
FROM price
GROUP BY grp_id
和min_created
,这会产生每组中第一个和最后一个值的时间。然后,您可以再次将结果返回到max_created
表,以获取相关记录的price
(这实际上是" groupwise maximum/minimum"的实例。问题):
value
在sqlfiddle上查看。