我从Group OHLC-Stockmarket Data into multiple timeframes - Mysql获得以下查询。
SELECT
FLOOR(MIN(`timestamp`)/"+period+")*"+period+" AS timestamp,
SUM(amount) AS volume,
SUM(price*amount)/sum(amount) AS wavg_price,
SUBSTRING_INDEX(MIN(CONCAT(`timestamp`, '_', price)), '_', -1) AS `open`,
MAX(price) AS high,
MIN(price) AS low,
SUBSTRING_INDEX(MAX(CONCAT(`timestamp`, '_', price)), '_', -1) AS `close`
FROM transactions_history -- this table has 3 columns (timestamp, amount, price)
GROUP BY FLOOR(`timestamp`/"+period+")
ORDER BY timestamp
在我的select语句中,FLOOR(MIN(timestamp)/"+period+")*"+period+" AS timestamp,
Y-M-D H:i:s
字符串或UTC时间戳,以便通过javascript进行解析。我们假设+period+
是86400(一天中的秒数)
我们假设时间戳是'2015-12-08 20:58:58'
从我所看到的,它采用时间戳,内部存储为整数并除以86400。
'2015-12-08 20:58:58' / 86400 = 233231576.4566898000
然后使用FLOOR操作使233231576
再次乘以86400(我假设这是为了确保舍入到当天)
我最终得到20151208166400
。
所以这是2015年12月8日,但我也有166400,我不知道它是什么?
所以现在问题的第二部分是,如何将此整数转换为2015-12-08 %H:%i:%s
甚至是UTC时间戳,以便通过Javascript进行解析。
答案 0 :(得分:0)
根据通用时间将Date
对象转换为string
:
var d = new Date();
var n = d.toUTCString();
n
的结果将是:
Mon,28 Dec 2015 12:57:32 GMT
答案 1 :(得分:0)
你是对的, SELECT DATE_FORMAT(DATE(`timestamp`), '%Y-%m-%d'),
...
GROUP BY DATE(`timestamp`)
是将UNIX风格的时间戳(自1970-01-01 00:00UTC以来的秒数)舍入到当前UTC午夜的粗略方式。
如果您正在尝试这样做,我建议您尝试使用这种MySQL代码:
{{1}}
这使用MySQL的内置日期算法将时间戳转换为午夜。
但是你应该小心一件事。这些时间戳都以UTC(f / k /格林威治标准时间)存储。当您使用它们进行日期算术运算,或者将它们从数据库中拉出来使用它们时,它们会根据您的MySQL时区设置自动转换为本地时间。
答案 2 :(得分:0)
timestamp
)/" +期间+")*" +期间+"),'%Y - %m-%d%H:%i:%s')如果句点==天考虑仅使用DAY()的MySQL周期舍入。
答案 3 :(得分:0)
我在评论中提到了问题,但没有修复。问题是建议的代码是针对unix时间戳,而不是日期时间值。
这可以通过适当的转换来解决
SELECT FROM_UNIXTIME(FLOOR(UNIX_TIMESTAMP(MIN(timestamp)) / $period) * $period)
这使您可以灵活地为分组设置任意秒数。