Eu trabalho no sql server 2012, enfrento um problema que não consigo select statment
obter o Partid do mês passado até o mês atual march (3)
.
com base em last date
existir porpartid
e ao mesmo tempo, se houver algum gaps between dates
, preencha-o com base na última data
então se
Encontrei partid com a última data 2022-01-08, então adicionarei 08-02-2022
e 08-03-2022
como partid6070
e se partid
com data no mês 7
e mês seguinte 10
e sem data part id
no mês 8
e 9 então ele deve exibir isso gaps
de acordo com o mês passado, pois partid 1234 tem lacuna.
ambos os casos devem ser aplicados para todos os dados baseados em partid
.
Createddate
usado abaixo no formato yyyy-mm-dd
.
create table Parts
(
PartId int,
CreatedDate date
)
insert into Parts(PartId,CreatedDate)
values
(1234,'2021-07-03'),
(1234,'2021-10-05'),
(1234,'2021-11-05'),
(5981,'2021-11-15'),
(5981,'2021-12-03'),
(6070,'2021-12-12'),
(6070,'2022-01-08')
eu preciso fazer a select statment
exibição parts
como resultado esperado
green rows
apenas para ficar mais claro que essas peças devem ser adicionadas com peças antigas existentes antes.
Resultado esperado
o que eu tento
postagem atualizada
código abaixo me dá parte do meu resultado esperado
porque me dá intervalos nulos entre as datas restantes para obter datas até o mês atual
então como fazer isso por favor?
;with cte as (
select partid, createddate,
dateadd(month, -1,
coalesce(lead(createddate) over (partition by partid order by createddate),
max(createddate) over ()
)
) as end_month
from Parts
union all
select partid, dateadd(month, 1, createddate), end_month
from cte
where createddate <end_month
)
select *
from cte
order by partid, createddate