【发布时间】:2016-03-24 20:46:36
【问题描述】:
您好,我正在尝试将间隔按 30 分钟分组到最近的小时。我可以按 30 分钟分组,但我无法使最近时间的逻辑工作。我附上了一张快照,您可以从中了解我想要什么。
select SUBSTRING_INDEX(GROUP_CONCAT(CAST(price AS CHAR) ORDER BY `timestamp`), ',', 1 ) as open,
max(price) high,
min(price) low,
SUBSTRING_INDEX(GROUP_CONCAT(CAST(price AS CHAR) ORDER BY `timestamp` desc), ',', 1 ) as close,
coinrace.watch_list.symbol,
timestamp
from coinrace.watch_quote
join coinrace.watch_list on coinrace.watch_list.watch_id = coinrace.watch_quote.watch_id
where (`timestamp` between '2015-12-03' and '2015-12-10')
and coinrace.watch_quote.serial_number = 1
and coinrace.watch_quote.BuyOrSell='buy'
and coinrace.watch_list.symbol='MCOEUR'
group by UNIX_TIMESTAMP(timestamp) div (30*60)
【问题讨论】:
-
2015-12-06 20:58:23呢?应该是2015-12-06 21:00:00还是2015-12-06 20:30:00? -
2015-12-06 21:00:00 快到 21 点了
-
不要将
BETWEEN与日期/时间/时间戳值一起使用 - you'll sometimes get wrong results。您应该改用独占上限 (<)。您可能能够构造一个查询中的虚拟表进行分组。您不应包含不属于GROUP BY的非聚合列 - 您会得到不确定的结果。我不确定,但greatest-n-per-group 选项之一可能更适合open/close。
标签: mysql sql mysql-workbench