我有一张桌子:
mysql> desc kursy_bid;
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| datetime | datetime | NO | PRI | NULL | |
| currency | varchar(6) | NO | PRI | NULL | |
| value | varchar(10) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
3 rows in set (0.01 sec)
我想从表中选择一些行,按一些时间间隔(可以是一天)分组,其中我将拥有该组的第一行和最后一行,max(值)和min(值)
我试过了:
select
datetime,
(select value order by datetime asc limit 1) open,
(select value order by datetime desc limit 1) close,
max(value),
min(value)
from kursy_bid_test
where datetime > '2009-09-14 00:00:00'
and currency = 'eurpln'
group by
month(datetime),
day(datetime),
hour(datetime);
但输出是:
| open | close | datetime | max(value) | min(value) |
+--------+--------+---------------------+------------+------------+
| 1.4581 | 1.4581 | 2009-09-14 00:00:05 | 4.1712 | 1.4581 |
| 1.4581 | 1.4581 | 2009-09-14 01:00:01 | 1.4581 | 1.4581 |
如你所见,开启和关闭是相同的(但它们不应该是)。什么应该是我想要的查询?
答案 0 :(得分:0)
似乎LIMIT
函数之前正在执行ORDER BY
操作。我不是专家(远非它),但我猜测嵌套查询的嵌套应该有效:
( (SELECT value ORDER BY datetime ASC) LIMIT 1) AS open
但这并不是一种优雅的方式。我相信其他SO用户会有更好的解决方案。
答案 1 :(得分:0)
SELECT DATE(datetime),
MIN(value) open,
MAX(value) close
FROM kursy_bid
WHERE DATE(datetime) = '2009-09-14'
AND currency = 'eurpln'
GROUP BY DATE(datetime)
提示:不要使用关键字作为列名称 - 给zly nawyk:)