May. 3rd, 2012

anspa: (Default)
Нашел в доброй самаритянской сети решение для сносной имитации first() и last() функций агреггирования в mysql (кои отсуствуют, ну last() в особенности, first() типа работает если поле указать без всякой функции, но не очень гарантируется). Нужно это для финансовых веселых картинок. Когда есть таблица с потоком цен с их временем в точности до секунд и их надо агреггировать в более-менее сносную картинку с минутной резолюцией. Допустим, таблица prices имеет колонки ticker, tstmp и price (self-explanatory), тогда выбрать из нее минутную OHLC серию (Open/High/Low/Close) можно так:
select DATE_FORMAT( tstmp, '%Y%m%d%h%i' ) dtmp, min( price ) low, max( price ) high,
SUBSTRING_INDEX( GROUP_CONCAT( CAST( price AS CHAR ) ORDER BY tstmp ) , ',', 1 ) open,
SUBSTRING_INDEX( GROUP_CONCAT( CAST( price AS CHAR ) ORDER BY tstmp DESC ) , ',', 1 ) close
from prices where ticker = 'некий тикер'
GROUP BY DATE_FORMAT( tstmp, '%Y%m%d%h%i' )

Утверждается что open и close не подзапросы а такие ж функции агреггирования, как и честные min() и max(). Поверим, ага. Заодно установил еще одну беззаботность mysql - алиаснутая колонка в списке селекта не может использоваться по алиасу в условии where, приходится опять писать все выражение. Вот долбанаты болгарские пиэйчди. Ничего не могут написать за столько лет.
anspa: (Default)
М. прислал книжку, запишу здесь -
http://xomusic.ru/krautrocksampler/

Profile

anspa: (Default)
anspa

December 2016

S M T W T F S
    123
45678910
11121314151617
18192021 222324
25 262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 12th, 2025 09:18 am
Powered by Dreamwidth Studios