Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Casper2002 Member Откуда: Сообщений: 268 |
Имеется следующая таблица вида senderID | EventDate | eWEEK | eYEAR dfsdafsd | 2019-10-3017:25:08.873 | 44 | 2019 dfsdafsd | 2019-10-30 16:36:18.713 | 45 | 2019 dfsdafsd| 2019-10-30 16:21:45.420 | 46 | 2019 xcvxcv | 2019-10-30 16:04:44.993 | 44 | 2019 fsdfsdffsdf | 2019-10-30 15:18:35.527 | 44 | 2019 fsdfsdffsdf | 2019-10-30 15:12:45.033 | 49 | 2019 dfd | 2019-10-30 15:07:42.527 | 49 | 2019 xxxl | 2019-10-30 15:04:23.830 | 49 | 2019 Необходимо вывести количество senderID по неделям так чтобы количество senderID увеличивалось в зависимости от значений предыдущей недели. Для данного примера должно полечиться: eYear,eWeek,SendeIDCount 2019 | 44 | 3 2019 | 45 | 4 (3+1) 2019 | 46 | 5 (4+1) 2019 | 49 | 8 (5+3) |
30 окт 19, 18:48 [22006445] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8856 |
Casper2002,select eWEEK , eYEAR , sum(cnt) over (order by eYEAR, eWEEK) from ( select cnt = count(*) , eWEEK , eYEAR from ... group by eWEEK , eYEAR ) c |
30 окт 19, 18:54 [22006448] Ответить | Цитировать Сообщить модератору |
Casper2002 Member Откуда: Сообщений: 268 |
Спасибо. я по другому сам сделал: select count(a1.senderID)+(select count(senderID) from a where (eWeek<a1.eWEEK and eYear=a1.eYear) OR (eYear<a1.eYear)),a1.eWEEK,a1.eYear from a as a1 group by a1.eWEEK,a1.eYear Так тоже правильно, но медленнее? |
31 окт 19, 09:34 [22006765] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4813 |
Casper2002, Да это медленнее и позорнее. Если нарастать должно внутри года и с началом года начинаться по новой, то вот так. select eWEEK , eYEAR , sum(cnt) over (PARTITION BY eYEAR order by eWEEK) from ( select cnt = count(*) , eYEAR , eWEEK from ... group by eWEEK , eYEAR order by eYEAR, eWEEK ) c |
31 окт 19, 10:25 [22006837] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4813 |
Casper2002, А вообще можно и без подзапроса select eYEAR, eWEEK ,sum(count(*) over (PARTITION BY eYEAR order by eWEEK) from ... group by eYEAR, eWEEK order by eYEAR, eWEEK |
31 окт 19, 10:27 [22006842] Ответить | Цитировать Сообщить модератору |
TaPaK Member Откуда: Kiev Сообщений: 6801 |
точно? |
||
31 окт 19, 10:34 [22006851] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4813 |
TaPaK, скобку одну забыл select eYEAR, eWEEK ,sum(count(*)) over (PARTITION BY eYEAR order by eWEEK) from ... group by eYEAR, eWEEK order by eYEAR, eWEEK |
31 окт 19, 10:42 [22006862] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8856 |
вот же написано, нарастающий итог за все время select count(senderID) from a where (eWeek<a1.eWEEK and eYear=a1.eYear) OR (eYear<a1.eYear)) |
||
31 окт 19, 11:02 [22006895] Ответить | Цитировать Сообщить модератору |
a_voronin Member Откуда: Москва Сообщений: 4813 |
msLex, вот так внутри года sum(count(*)) over (PARTITION BY eYEAR order by eWEEK) вот так за все время sum(count(*)) over (order by eYEAR, eWEEK) |
31 окт 19, 13:30 [22007120] Ответить | Цитировать Сообщить модератору |
Casper2002 Member Откуда: Сообщений: 268 |
Всем спасибо, разобрался. |
31 окт 19, 15:11 [22007262] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |