Mysql Сложный запрос с группировками

katik

Новичок
Подскажите, пожалуйста, как правильно построить запрос
PHP:
SELECT MIN(l.ON_AIR_START) as START, MAX(l.ON_AIR_START) as END, SUM(l.TIME_ON_AIR), T.SHOW_LOGO, T.COMMENT2 ,l.PRODUCT_ID as PRODUCT_ID, T.SHOW_START, LP.SP_GROSS_D as SP_GROSS_DISC, P.SP_GROSS_D, T.PRI_LABEL, DATE_FORMAT(l.ON_AIR_START, '%d.%m.%Y %H:%i:%s') as ON_AIR_START, DATE_FORMAT(T.SHOW_START, '%d.%m.%Y %H:%i:%s') as SHOW_START FROM `on_air_log` as l 
				LEFT JOIN `VGE_PRODUCT` as P ON P.DISPLAY_ID = l.PRODUCT_ID
				LEFT JOIN `VGE_VGETABLE` as T ON T.PRODUCT_ID=P.ID  AND DATE_FORMAT(T.SHOW_START, '%Y-%m-%d 00:00:00')=DATE_FORMAT(l.ON_AIR_START, '%Y-%m-%d 00:00:00')
				LEFT JOIN `VGE_LUP_PRICE` as LP ON LP.PRODUCT_ID=P.ID  AND DATE_FORMAT(l.ON_AIR_START, '%Y-%m-%d 00:00:00') = LP.SHOW_DAY
				WHERE l.ON_AIR_START >='2013-06-12 00:00:00' AND l.ON_AIR_START <='2013-06-12  23:59:59'  
				GROUP BY l.PRODUCT_ID, T.SHOW_START     
				ORDER BY l.ON_AIR_START
Нужно выбрать MIN(первый ролик), MAX(последний ролик), SUM(суммарное время в эфире) в соответствии с группировкой l.PRODUCT_ID (ID продукта), T.SHOW_START (время эфира), т.е. для продукта в конкретном эфире. Если продукт показывают только в одном эфире за день, то все считается правильно, но если продукт показывают в нескольких эфирах, то MIN, MAX, SUM считает за целый день, а не в конкретном эфире.
 

AlexNemanov

Новичок
Может вы для большей ясности скинете SQL со структурой таблиц, и несколькими данными. Это на много облегчит задачу тому, кто захочет помочь.
 

katik

Новичок
Таблицы очень объемные. Решила задачу отдельными запросами и собрала в общий массив. Думаю, так меньше вероятность ошибки.
 

AlexNemanov

Новичок
Поздравляю с найденным решением!

PS: Чтобы не работать с массивами, можно использовать временные таблицы на SQL сервере, работать будет быстрее и дешевле по ресурсам.
 

prolis

Новичок
Если продукт показывают только в одном эфире за день, то все считается правильно, но если продукт показывают в нескольких эфирах, то MIN, MAX, SUM считает за целый день, а не в конкретном эфире.
Такое возможно только если T.SHOW_START - это поле с временем эфира без даты или даты без времени (либо два эфира в одно время возможны). В любом случае для группировки по эфиру нужно вместо этого поля использовать уникальный идентификатор эфира.
 
Сверху