2009-09-15 1 views
0

У меня есть таблица:Группировка с операндами

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) 

Я хотел бы выделить несколько строк из таблицы, сгруппированные по некоторым временным интервалом (может быть один день), где у меня будет первый ряд и последний строка группы, максимальная (значение) и мин (значение).

Я пробовал:

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

Кажется, что операция LIMIT выполняется до функции ORDER BY. Я не эксперт (далеко от него), но я предполагаю, что гнездятся на вложенный запрос должен работать:

((SELECT value ORDER BY datetime ASC) LIMIT 1) AS open 

Но это не совсем элегантный способ сделать это. Я уверен, что у других пользователей SO будет лучшее решение.

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) 

СОВЕТ: НЕ ИСПОЛЬЗОВАТЬ КАК KEYWORDS КОЛОННЫХ ИМЕНА - к ZLY nawyk :)

+0

Извините, но это очень далеко от шляпы я хочу, ты прочитал весь вопрос? :) Именование coulmns с «ключевыми словами» неплохо, не создает никаких проблем :) – 2009-09-15 12:33:08

+0

И - дата создания (datetime) = '2009-09-14' медленнее (не использует индексы), чем datetime> '2009-09-14' – 2009-09-15 12:34:38

+0

Если вы собираетесь использовать форматирование, сделайте его доступным для чтения. –

Смежные вопросы