Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 запрос по неделям инкрементальный  [new]
Casper2002
Member

Откуда:
Сообщений: 266
Имеется следующая таблица вида
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]     Ответить | Цитировать Сообщить модератору
 Re: запрос по неделям инкрементальный  [new]
msLex
Member

Откуда:
Сообщений: 7726
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]     Ответить | Цитировать Сообщить модератору
 Re: запрос по неделям инкрементальный  [new]
Casper2002
Member

Откуда:
Сообщений: 266
Спасибо.

я по другому сам сделал:

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]     Ответить | Цитировать Сообщить модератору
 Re: запрос по неделям инкрементальный  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4374
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]     Ответить | Цитировать Сообщить модератору
 Re: запрос по неделям инкрементальный  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4374
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]     Ответить | Цитировать Сообщить модератору
 Re: запрос по неделям инкрементальный  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
a_voronin
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:34    [22006851]     Ответить | Цитировать Сообщить модератору
 Re: запрос по неделям инкрементальный  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4374
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]     Ответить | Цитировать Сообщить модератору
 Re: запрос по неделям инкрементальный  [new]
msLex
Member

Откуда:
Сообщений: 7726
a_voronin
Если нарастать должно внутри года и с началом года начинаться по новой, то вот так.

вот же написано, нарастающий итог за все время
select count(senderID) from a where (eWeek<a1.eWEEK and eYear=a1.eYear) OR (eYear<a1.eYear))
31 окт 19, 11:02    [22006895]     Ответить | Цитировать Сообщить модератору
 Re: запрос по неделям инкрементальный  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4374
msLex,

вот так внутри года

sum(count(*))  over (PARTITION BY eYEAR order by eWEEK)


вот так за все время
sum(count(*))  over (order by eYEAR,  eWEEK)
31 окт 19, 13:30    [22007120]     Ответить | Цитировать Сообщить модератору
 Re: запрос по неделям инкрементальный  [new]
Casper2002
Member

Откуда:
Сообщений: 266
Всем спасибо, разобрался.
31 окт 19, 15:11    [22007262]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить