【发布时间】:2012-02-29 13:07:14
【问题描述】:
我有一个 SQL 数据库,其中的行包含给定日期时间的 EUR/USD 价格:
我想将这些数据分成 1 分钟的组并获取一些信息,我编写了一个调用 sqlite3 数据库的 python 程序。现在,我有这个程序:
def SQLQuerySpecial(currency,start,end):
sql = 'SELECT f.datetime, f.buy, c.minp, c.maxp, c.avgp FROM {c} f INNER JOIN (SELECT MIN(datetime) mindate, MAX(datetime) maxdate, MIN(sell) minp, MAX(sell) maxp, AVG(buy) avgp FROM {c} GROUP BY strftime("%Y-%m-%d %H:%M",datetime)) c ON f.datetime = c.mindate or f.datetime = c.maxdate'.format(c = currency)
当我这样做时:
SQLQuerySpecial("EUR", "2002-01-02 01:27:00", "2002-01-02 01:34:00")
我得到了结果:
('2002-01-02 01:26:33', 0.8913, 0.8913, 0.8913, 0.8913)
('2002-01-02 01:27:12', 0.8946, 0.8946, 0.8947, 0.89462)
('2002-01-02 01:27:49', 0.8946, 0.8946, 0.8947, 0.89462)
('2002-01-02 01:28:00', 0.8947, 0.8946, 0.8947, 0.8946454545454546)
('2002-01-02 01:28:00', 0.8946, 0.8946, 0.8947, 0.8946454545454546)
('2002-01-02 01:28:43', 0.8946, 0.8946, 0.8947, 0.8946454545454546)
('2002-01-02 01:28:43', 0.8946, 0.8946, 0.8947, 0.8946454545454546)
('2002-01-02 01:29:49', 0.8946, 0.8946, 0.8947, 0.89465)
('2002-01-02 01:29:49', 0.8947, 0.8946, 0.8947, 0.89465)
('2002-01-02 01:29:52', 0.8946, 0.8946, 0.8947, 0.89465)
('2002-01-02 01:29:52', 0.8947, 0.8946, 0.8947, 0.89465)
('2002-01-02 01:30:41', 0.8945, 0.8945, 0.8946, 0.8945299999999999)
...等 21 行结果。
我想要在 01:27 和 01:34 参数之间的函数只获得 8 行:
2002-01-02 01:27:xx ,买入价 @ 01:27 ,最高买入价在 01:27 到 01:28 之间,最低买入价在 01:27 到 01:28 之间,买入价@1: 28
2002-01-02 01:28:xx ,买入价 @ 01:28 ,最高买入价在 01:28 到 01:29 之间,最低买入价在 01:28 到 01:29 之间,买入价@1: 29
2002-01-02 01:29:xx ...
...
到 2002-01-02 01:34:xx ...
老实说,我试图找到正确的方法来做这件事,但这对我来说很棘手,我不太擅长 SQL。感谢阅读和帮助。
特别感谢 unutbu
【问题讨论】: