2014-02-16 4 views
-1

У меня есть база данных с записями, и мне нужно сделать историю рыночной цены за последние 10 дней, и я возвращаю цену открытия и цену закрытия.Получить исторические данные

База данных что-то:

ID | MARKET | EXCHANGE | LAST_TRADE | TIMESTAMP 
1 | 1 | 1  |  25  | 1392562800 #2014/2/16 @ 15:0:0 <-- "Today's Open" (first insert of the day) 
2 | 1 | 1  |  35  | 1392573600 #2014/2/16 @ 18:0:0 
3 | 1 | 1  |  45  | 1392584400 #2014/2/16 @ 21:0:0 
4 | 1 | 1  |  55  | 1392562800 #2014/2/16 @ 23:59:0 <-- "Today's Close" (last insert of the day) 

Предположим, мы имеем больше дней, мы должны сгруппировать его по дням и вернуть открытый и цена закрытия в тот день, когда рынок и обмен = 1

Пример :

ID | MARKET | EXCHANGE | DATE | OPEN | CLOSE 
1 | 1 | 1  | 2014/2/16 | 25 | 55 
+1

В каком формате есть эта метка времени? Действительно ли эта строка внутри? – idmean

+0

Столбец timestamp - int (11), строка представляет собой простой ссылочный комментарий – Bayer

+0

, можете ли вы поделиться сценарием генерации схемы, чтобы я мог проверить запрос на моем конце, прежде чем передать его вам ... – dopeddude

ответ

2

После converting the timestamp и группировка по дате только, вы можете использовать this trick, чтобы получить первые и последние ряды в совокупности:

select 
    market, 
    exchange, 
    date(FROM_UNIXTIME(timestamp)), 
    SUBSTRING_INDEX(GROUP_CONCAT(CAST(lastTrade AS CHAR) ORDER BY timestamp), 
     ',', 1) as open, 
    SUBSTRING_INDEX(GROUP_CONCAT(CAST(lastTrade AS CHAR) ORDER BY timestamp DESC), 
     ',', 1) as close 
from historicdata 
group by market, exchange, date(FROM_UNIXTIME(timestamp)); 

Fiddle here

Похоже, ваши комментарии временные метки не совсем соответствует фактической отметки времени - строка 1 и 4 оба имеют метку времени 1392562800. Скрипка также включает внутридневную высоту выше закрытия, точно так же, как и тестовый случай :)

+1

Удивительный !! отлично :) +1 – Bayer

+0

Очевидно, что приведение столбца идентификатора на самом деле не имеет смысла в сгруппированном результате, хотя вы можете применить к нему еще один агрегат, например. 'MIN' или' MAX' – StuartLC

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