选择特定时间段的烛台数据(最大,最小,开启,关闭)

时间:2017-10-23 21:45:37

标签: mysql sql charts

我正在处理烛台图表数据。我有一个带

的数据库表(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小时等?此外,这适用于最大值和最小值,但我还需要一个开始值(第一个)用于时间段和接近值(最后一个)。

1 个答案:

答案 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上查看。