2014-01-27 3 views
0

У меня есть данные фондового рынка в базе данных mysql. Я бы хотел найти заключительную торговую цену за каждый час.mysql. Как выбрать последнюю дату для каждого часа

Я пришел с этим запросом:

SELECT MAX(date), price, FROM tradetable WHERE date BETWEEN '2014-01-25 23:00:00' AND '2014-01-28 12:59:59' GROUP BY hour(date) ORDER BY date;

Однако мои результаты не упорядочены по дате правильно. Это перепуталось. Часы и дни не в порядке.

Что я делаю неправильно? Данные

Возвращается:

2014-01-27 02:59:59 --- 815,37000
2014-01-27 03:59:59 --- 813,00000
2014-01-27 04: 59:59 --- 808.59998
2014-01-27 05:59:59 --- 812.07001
2014-01-27 06:59:59 --- 816.00000
2014-01-27 07:59: 59 --- 825,84998
2014-01-27 08:59:59 --- 824.00000
2014-01-27 09:59:59 --- 825.50000
2014-01-27 10:59:59 --- 828,91998
2014-01-27 11:59:59 --- 820,00000
2014-01-27 12:59:59 --- 816,90002
2014 -01-27 13:59:59 --- 821.20001
2014-01-26 14:59:59 --- 822.88000
2014-01-26 15:59:59 --- 819.00000
2014-01 -26 16:59:59 --- 817.79999
2014-01-26 17:59:59 --- 817.78003
2014-01-26 18:59:59 --- 819.98999
2014-01-26 19:59:59 --- 816.66998
2014-01-26 20:59:59 --- 822.159 97
2014-01-26 21:59:59 --- 819,52002
2014-01-26 22:59:59 --- 820,00000
2014-01-26 23:59:59 --- 816,00000
2014-01-27 00:59:59 --- 825,39001
2014-01-27 01:59:59 --- 821.90002

ответ

1

использование:

GROUP BY DATE(date), HOUR(date) 

Вы комбинируя раз из разных дней в той же группе.

+0

Большое вам спасибо! – user985723

0
SELECT MAX(date), price, FROM tradetable WHERE date BETWEEN '2014-01-25 23:00:00' AND '2014-01-28 12:59:59' 
GROUP BY hour(date) ORDER BY date, time DESC 
0

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

SELECT T1.date,T1.price 
FROM tradetable T1 
INNER JOIN 
    (SELECT DATE(date) as tradedate, 
      HOUR(date) as tradehour, 
      MAX(date) as maxtime 
    FROM tradetable 
    WHERE date BETWEEN '2014-01-25 23:00:00' AND '2014-01-28 12:59:59' 
    GROUP BY tradedate,tradehour 
    )T2 
ON T1.date = T2.maxtime 
ORDER BY T1.date 
Смежные вопросы