Образец таблицыSQL: SUM после GROUP BY
CustomerId | VoucherId | CategoryId | StartDate | EndDate
-------------------------------------------------------------
10 | 1 | 1 | 2013-09-01| 2013-09-30
10 | 1 | 2 | 2013-09-01| 2013-09-30
11 | 2 | 1 | 2013-09-01| 2013-11-30
11 | 2 | 2 | 2013-09-01| 2013-11-30
11 | 2 | 3 | 2013-09-01| 2013-11-30
10 | 3 | 1 | 2013-10-01| 2013-12-31
10 | 3 | 2 | 2013-10-01| 2013-12-31
11 | 4 | 1 | 2013-12-01| 2014-04-30
В вышеуказанной записи образца, я хочу узнать Общее количество месяцев ваучеры клиента покрывают
мне нужен выход в виде
CustomerId | Months
--------------------
10 | 4
11 | 8
Загвоздка в том, что ваучер может иметь несколько строк для различных CategoryIds ...
I ча lculated месяцев охватываемые ваучер, как DATEDIFF (ММ, StartDate, EndDate) + 1 ...
Когда я применить SUM (DATEDIFF (ММ, StartDate, EndDate)) GROUP BY VoucherId, StartDate, EndDate Я даю неправильный результат из-за нескольких строк для VoucherId ....
я получаю что-то вроде этого ...
CustomerId | Months
--------------------
10 | 8
11 | 14
CategoryId бесполезен в этом сценарии
Благодаря
Спасибо ... Это работает ... Незначительный перебор, хотя :) –
Если у вас есть возможность совпадения диапазонов дат, тогда это может быть необходимо. Скажем, клиентский 1 имеет диапазоны дат 9/1-10/4, 12/1-12/30, 10/1-11/30. Решение Романа дало бы вам сумму 5 (2 + 1 + 2), когда должно быть 4 (с сентября по декабрь = 4). –