У меня есть 2 таблицы ниже, и мне нужно получить итоги для каждой строки из таблицы 1 в виде новых столбцов.
Настольные программы:
AIR_DATE START_TIME END_TIME
-------------------------------------------
1/26/2015 12:00:00 AM 27000000 28800000
1/26/2015 12:00:00 AM 28800000 32400000
1/26/2015 12:00:00 AM 34200000 34280000
Таблица рейтингов:
IMPRESSION_DATE IMP_START_TIME IMP_END_TIME HH F2_5 IMP_STATUS
--------------------------------------------------------------------
1/26/2015 12:00:00 AM 27000000 27899000 8685 4415 F
1/26/2015 12:00:00 AM 27900000 28799000 8690 4421 F
1/26/2015 12:00:00 AM 28800000 29699000 9900 4410 F
1/26/2015 12:00:00 AM 29700000 30599000 9906 4414 F
1/26/2015 12:00:00 AM 30600000 31499000 6925 2580 F
1/26/2015 12:00:00 AM 31500000 32399000 6928 2588 F
1/26/2015 12:00:00 AM 32400000 33299000 9988 17 F
1/26/2015 12:00:00 AM 33300000 34199000 9998 19 F
1/26/2015 12:00:00 AM 34200000 35099000 781 2457 F
Я ищу, как получить целевой результат, установленный как:
AIR_DATE START_TIME END_TIME IMP_DATE IMP_START_TIME IMP_END_TIME HH_F F2_5_F
1/26/2015 27000000 28800000 1/26/2015 27000000 28799000 8687.5 4418
1/26/2015 28800000 30600000 1/26/2015 28800000 30599000 8414.75 3498
1/26/2015 34200000 34280000 1/26/2015 34200000 35099000 781 2457
Мой пример запроса, но он мне не помог :)
SELECT *
FROM PROGRAMS as P
CROSS APPLY (
SELECT
MIN(CASE WHEN R.IMP_STATUS = 'F' THEN IMP_START_TIME END) as IMP_START_TIME,
MAX(CASE WHEN R.IMP_STATUS = 'F' THEN IMP_END_TIME END) as IMP_END_TIME,
AVG(CASE WHEN R.IMP_STATUS = 'F' THEN HH END) as HH_F,
AVG(CASE WHEN R.IMP_STATUS = 'F' THEN F2_5 END) as F2_5_F
FROM RATINGS as R
WHERE R.IMPRESSION_DATE = P.AIR_DATE
AND R.IMP_START_TIME <= P.START_TIME
AND P.END_TIME <= R.IMP_END_TIME) as R
RDBS: MS SQL SERVER 2008 R2 Пример SQL Fiddler здесь: http://sqlfiddle.com/#!3/68fa5/2
jpw
- person SpanishBoy   schedule 09.07.2015