SQL 如果列值在下个月不存在,则服务器查询以获取上个月的数据

SQL Server query to get the data from previous month if the column value is not present in next month

我有一个 table,其中包含餐厅每个月的一些菜单项。 只要项目数量发生变化,table 就会更新。

我想更改 table 或创建一个新的 table 以获取每个月的项目价值。

例如。 如果最近的月份是四月

餐厅 项目数 月份
一个 20 1/1/2021
一个 15 1/21/2021
B 12 1/1/2021
C 30 2021 年 2 月 1 日
一个 22 2021 年 3 月 31 日
B 15 2021 年 4 月 1 日

我希望新的 table 具有以上行以及与上个月相同数据的缺失月份

餐厅 项目数 月份
一个 20 1/1/2021
一个 15 1/21/2021
一个 15 2021 年 2 月 21 日
一个 22 2021 年 3 月 1 日
一个 22 2021 年 4 月 1 日
B 12 1/1/2021
B 12 2021 年 2 月 1 日
B 12 2021 年 3 月 1 日
B 15 2021 年 4 月 1 日
C 30 2021 年 2 月 1 日
C 30 2021 年 3 月 31 日
C 30 2021 年 4 月 1 日

感谢大家的帮助感谢

这回答了问题的原始版本。

假设 month 被存储为具有该月第一天的日期,那么一个简单的方法使用递归 CTE:

with cte as (
      select restaurant, num_items, month,
             dateadd(month, -1,
                     coalesce(lead(month) over (partition by restaurant order by month),
                              max(month) over ()
                             )
                    ) as end_month
      from t
      union all
      select restaurant, num_items, dateadd(month, 1, month), end_month
      from cte
      where month < end_month
     )
select *
from cte
order by restaurant, month;

Here 是一个 db<>fiddle.