正しく動作するストアド プロシージャがありますが、それが動作する理由の理論がわかりません。datepart と密なランクを利用して、連続した期間を特定しています (他の場所で解決策を見つけました)。
select
c.bom
,h.x
,h.z
,datepart(year, c.bom) * 12 + datepart(month, c.bom) -- this is returning a integer value for the year and month, allowing us to increment the number by one for each month
- dense_rank() over ( partition by h.x order by datepart(year, c.bom) * 12 + datepart(month, c.bom)) as grp -- this row does a dense rank and subtracts out the integer date and rank so that consecutive months (ie consecutive integers) are grouped as the same integer
from
#c c
inner join test.vw_info_h h
on h.effective_date <= c.bom
and (h.expiration_date is null or h.expiration_date > c.bom)
グループ化機能で何が起こっているかを理論的に理解しています。
年 * 12 + 月の掛け算はどのように機能しますか? なぜ年を掛けるのですか?バックエンドで何が起きているのか?