Считать в месяц - PullRequest
       21

Считать в месяц

0 голосов
/ 14 апреля 2019

Кажется, я не могу понять, как мне подходить к этому оператору выбора.

У меня есть таблица с именем unified_assets, в которой столбцы даты сначала видны, а последние видны среди других.

Мне нужно запросить следующее: все активы в месяц.

Очевидно, что они рассчитываются с первого взгляда, но также исключают все строки, у которых последние несколько месяцев для данного месяца.

Я могу сосчитатьвсе первое, поскольку это довольно просто.

MSSQL 16

SELECT YEAR(firstseen) Year, MONTH(firstseen) Month, COUNT(*) Count

FROM unified_assets

GROUP BY YEAR(firstseen), MONTH(firstseen)

ORDER BY YEAR(firstseen), MONTH(firstseen);

По сути, сейчас мне нужно добавить столбец с добавлением всех предыдущих «firstseen» и вычесть все «lastseen », которые старше 3 месяцев.

Будем весьма благодарны за любые указатели.

1 Ответ

0 голосов
/ 14 апреля 2019

Один метод состоит в том, чтобы сгенерировать месяцы, а затем использовать для расчета коррелированные подзапросы или apply.

Ниже приводится вычисление числа, активного в первый день месяца.Сначала он генерирует все месяцы на 2018 год - или любой интересующий вас диапазон:

with months as (
      select convert(date, '2018-01-01') as yyyymm
      union all
      select dateadd(month, 1, yyyymm)
      from months
      where yyyymm < '2018-01-12'
     )
select m.yyyymm,
       (select count(*)
        from unified_assets ua
        where ua.firstseen <= m.yyyymm and
              ua.lastseen >= m.yyyymm
       ) as cnt
from months m
order by m.yyyymm;
...