В этой статье будет рассмотрены примеры использования функции IntervalMatch.
Рассмотрим пример
[tester_signal]: LOAD Signal_datetime, Signal_symbol, "symbol", indicator, "1d", "6h", "1h" FROM [lib://DataFiles/tester_signal.qvd] (qvd); NoConcatenate [TEMP tester_price_changes]: LOAD datetime, "symbol", last_price, price_change, price_change_percent, high_price, low_price, volume, weighted_avg_price, quote_volume FROM [lib://DataFiles/tester_price_changes.qvd] (qvd); [TEMP max_datetime]: Load max(datetime) as max_datetime Resident [TEMP tester_price_changes]; LET vMaxDatetime = Timestamp(Num#(Peek('max_datetime',0,'TEMP max_datetime'))+Frac(MakeTime(0,30))); NoConcatenate [tester_price_changes]: LOAD datetime, Timestamp(datetime,'DD.MM.YYYY h:mm') As [Дата Время Начало], If(symbol=Previous(symbol) and symbol<>'' and not IsNull(symbol), Timestamp(Peek('datetime'),'DD.MM.YYYY h:mm'), Timestamp('$(vMaxDatetime)','DD.MM.YYYY h:mm') ) As [Дата Время Конец], symbol, Timestamp(datetime,'DD.MM.YYYY h:mm') As [ДатаВремя Цен], symbol&'|'&(Num(time(frac(floor(datetime,1/1440)),'hh:mm'))+floor(datetime)) As %ID, last_price, price_change, price_change_percent, high_price, low_price, volume, weighted_avg_price, quote_volume Resident [TEMP tester_price_changes] Order By symbol,datetime desc ; Drop Tables [TEMP tester_price_changes]; Left Join([tester_signal]) intervalmatch (Signal_datetime,symbol) LOAD [Дата Время Начало], [Дата Время Конец], symbol RESIDENT tester_price_changes; Left Join(tester_signal) Load [Дата Время Начало], [Дата Время Конец], symbol, %ID RESIDENT tester_price_changes; DROP Fields [Дата Время Начало], [Дата Время Конец], symbol From [tester_signal];
___