|
Составление sql запроса по
|
|||
---|---|---|---|
#18+
Добрый день. Прошу помочь с составлением SQL запроса по заданным параметрам: есть исходная первая таблица, нужно кумулятивно посчитать кол-во id помесячно с учетом EndDate (как во второй таблице) ID StartDate EndDate 1 01.01.2018 12.02.2018 2 01.02.2018 12.03.2018 3 15.02.2018 4 01.03.2018 5 12.03.2018 6 16.03.2018 Месяц Количество январь 1 февраль 2 март 4 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2021, 21:30 |
|
Составление sql запроса по
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.04.2021, 22:21 |
|
Составление sql запроса по
|
|||
---|---|---|---|
#18+
PaulWist Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Спасибо! Только немного не верно в условиях указал, нужно чтобы в итоге таблица получалась месяц с годом и количество ID без повторений Такая: Месяц Количество январь 2018 1 февраль 2018 2 март 2018 4 По вашему запросу если в EndDate добавить дату например до 2021 года, то один и тот же ID будет два раза считаться авторcreate table #t (id int, StartDate date, EndDate date ) insert into #t values (1, '20180101', '20180212'), (2, '20180201', '20180312'), (3, '20180215', null), (4, '20180301', null), (5, '20180312', null), (6, '20180316', '20210312'), (7, '20180411', null), (8, '20180512', '20210212') go with cte (ID, dDate) as (select ID, StartDate from #t where StartDate is not null union all select ID, EndDate from #t where EndDate is not null ) select DATEADD(MONTH, DATEDIFF(MONTH, 0, cte.dDate), 0) as 'Месяц', count(distinct(ID)) as 'Количество' from cte group by DATEADD(MONTH, DATEDIFF(MONTH, 0, cte.dDate), 0), month(cte.dDate) order by DATEADD(MONTH, DATEDIFF(MONTH, 0, cte.dDate), 0) go ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2021, 14:26 |
|
Составление sql запроса по
|
|||
---|---|---|---|
#18+
Не могу пред. сообщение отредактировать Ответ такой получается по последнему запросу: 2018-01-01 1 2018-02-01 3 2018-03-01 4 2018-04-01 1 2018-05-01 1 2021-02-01 1 2021-03-01 1 А нужен такой: 2018-01-01 1 2018-02-01 3 2018-03-01 5 2018-04-01 5 2018-05-01 6 2021-02-01 5 2021-03-01 4 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2021, 14:40 |
|
Составление sql запроса по
|
|||
---|---|---|---|
#18+
Dolphiin, А нужен такой: DolphiinА нужен такой: 2018-01-01 1 2018-02-01 3 2018-03-01 5 2018-04-01 5 2018-05-01 6 2021-02-01 5 2021-03-01 4 Не пойму, почему в марте 2018 должно быть 5, а не 4. автор(1, '20180101', '20180212'), (2, '20180201', '20180312'), (3, '20180215', null), (4, '20180301', null), (5, '20180312', null), (6, '20180316', '20210312'), (7, '20180411', null), (8, '20180512', '20210212') ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2021, 15:02 |
|
Составление sql запроса по
|
|||
---|---|---|---|
#18+
PaulWist, авторНе пойму, почему в марте 2018 должно быть 5, а не 4. Ещё подходит (3, '20180215', null), т.к. у него нет даты окончания. Наверно немного не понятно все объясняю, реальное задание - есть список контрактов (ID), дата начала контракта и дата окончания контракта. Нужно помесячно с годами посчитать кумулятивно их количество. Получается условия: - если у контракта нет даты окончания, его в каждом месяце нужно прибавлять - если есть дата окончания, то перестать прибавлять в следующем месяце после даты окончания ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2021, 18:05 |
|
Составление sql запроса по
|
|||
---|---|---|---|
#18+
Dolphiin, создайте помесячную таблицу-календарь и ищите пересечения ... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2021, 18:25 |
|
Составление sql запроса по
|
|||
---|---|---|---|
#18+
Dolphiin, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.04.2021, 19:07 |
|
|
start [/forum/topic.php?fid=46&fpage=28&tid=1684848]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 144ms |
0 / 0 |