Получение данных для прогнозов
Мы получаем исходные данные из базы данных MS SQL с помощью SQL-запросов.
Получение данных о заказах
Для получения данных о заказах составляется отчет по заказам с фильтрацией по дате заказа и наличию даты поставки.
Источником получения данных служит таблица Report.[report_zakaz_tbl]
Запрос извлекает данные о заказах из таблицы отчетов за указанный период времени. Запрос фокусируется на заказах, где дата заказа находится в заданном диапазоне, и дата поставки не является NULL. Дополнительно вычисляется поле с датой поставки, увеличенной на 15 минут.
Текст запроса
Ниже представлен запрос для получения информации о заказах:
SELECT
id_order as id,
ShopNo as shopno,
order_type,
gettype,
date_order,
date_supply,
date_supply_untill,
date_posted,
date_collect_start,
date_collected,
date_delivery_start,
date_delivered,
sum_paid,
sum_paid_coupon,
count_pos,
latitude,
longitude,
client_type,
order_weight,
delivery_hottime,
collecting_await_dur,
collecting_dur,
delivery_await_dur,
delivery_dur,
completed_agg,
distance,
DATEADD(Minute, 15, date_supply) as date_supply_vv
FROM Report.[report_zakaz_tbl] rzt (NOLOCK)
WHERE date_order BETWEEN '{{payload.from}}' AND '{{payload.to}}'
AND date_supply IS NOT NULL
Поля запроса
Запрос возвращает 27 полей. Ниже приведена таблица с описаниями:
Поле SELECT | Исходное поле | Тип данных |
id | id_order | INT |
shopno | ShopNo | INT |
order_type | order_type | TinyInt |
gettype | gettype | TinyInt |
date_order | date_order | DateTime |
date_supply | date_supply | DateTime |
date_supply_untill | date_supply_untill | DateTime |
date_posted | date_posted | DateTime |
date_collect_start | date_collect_start | DateTime |
date_collected | date_collected | DateTime |
date_delivery_start | date_delivery_start | DateTime |
date_delivered | date_delivered | DateTime |
sum_paid | sum_paid | FLOAT |
sum_paid_coupon | sum_paid_coupon | FLOAT |
count_pos | count_pos | SmallInt |
latitude | latitude | Decimal(19,16) |
longitude | longitude | Decimal(19,16) |
client_type | client_type | NVarChar(100) COLLATE Cyrillic_General_CI_AS |
order_weight | order_weight | Decimal(15,3) |
delivery_hottime | delivery_hottime | DateTime |
collecting_await_dur | collecting_await_dur | INT |
collecting_dur | collecting_dur | INT |
delivery_await_dur | delivery_await_dur | INT |
delivery_dur | delivery_dur | INT |
completed_agg | completed_agg | INT |
distance | distance | Real |
date_supply_vv | date_supply | (вычисляемое) |
Фильтры запроса
В запросе присутствуют 2 фильтра:
- date_order BETWEEN '{{payload.from}}' AND '{{payload.to}}': Фильтр по дате заказа. Включает заказы, где дата заказа >= '{{payload.from}}' и <= '{{payload.to}}'.
- date_supply IS NOT NULL: Исключает заказы без указанной даты поставки.
Вычисляемые поля
В запросе есть вычисляемое поле:
- DATEADD(Minute, 15, date_supply) as date_supply_vv: Функция SQL Server для добавления 15 минут к полю date_supply.
Получение данных о геозонах
Для получения данных о геозонах составляется отчет по зонам с фильтрацией по магазинам.
Источником получения данных служит таблицы [GeoReports].[Analytics].[EffectiveZonesOnlineServices] и [Geo].[geo].[tt]
Запрос объединяет данные из двух таблиц для получения информации о зонах, услугах и временных интервалах.
Текст запроса
Ниже представлен запрос для получения информации о заказах:
SELECT
tt.N AS id_tt,
id_online_service,
id_poly,
date_add,
geo,
payway,
time_start,
time_end
FROM [GeoReports].[Analytics].[EffectiveZonesOnlineServices] (NOLOCK) z
JOIN [Geo].[geo].[tt] tt ON tt.id_TT = z.id_tt
WHERE tt.name_TT LIKE '%ДС[_]%
Поля запроса
Запрос возвращает 8 полей. Ниже приведена таблица с описаниями:
Поле SELECT | Исходное поле | Тип данных |
id_tt | tt.N | |
id_online_service |
id_online_service |
|
id_poly |
id_poly |
|
date_add |
date_add |
|
geo |
geo |
|
payway |
payway |
|
time_start |
time_start |
|
time_end |
time_end |
Фильтры запроса
В запросе присутствуют 2 фильтра:
- INNER JOIN на tt.id_TT = z.id_tt. Это объединяет записи только если есть совпадение по идентификатору точки (id_tt). Если в z нет соответствующей записи в tt, она не попадет в результат.
- WHERE tt.name_TT like '%ДС[_]%': Фильтр по имени точки (магазина) в таблице tt.