代码之家  ›  专栏  ›  技术社区  ›  Ekaterina Chistyakova

将cte与日期相结合,并将表格与两个日期之间的日期相结合

  •  0
  • Ekaterina Chistyakova  · 技术社区  · 4 年前

    我有一些代码可以提供我需要的东西,但我需要一些帮助来将它们组合在一起。 我有:

    create table #test ( job int, dateL date)
    insert into #test values
    (1, '2022-04-01'),
    (2, '2022-04-02'),
    (3, '2022-04-12'),
    (4, '2022-04-27'),
    (5, '2022-05-01')
    
    declare
    @startdate date = '2022-04-01',
    @enddate date = '2022-04-30'
    

    为此,我需要查看名为job的设置周期的哪一周出现,但我还需要找到每周的开始日期。所以我有这样做的cte,然后是找到工作的代码

    ;with cte as
    (
      select @startDate StartDate
      union all
      select dateadd(ww, 1, StartDate)
      from cte
      where dateadd(ww, 1, StartDate)<=  @endDate
    )
    
    
    
    SELECT job,dateL,
    (
      SELECT CASE 
        WHEN dateL BETWEEN @startdate AND  @enddate THEN DATEDIFF(wk, @startdate, dateL) 
        ELSE -1 
    END
    )
    AS WeekNumber 
    from #test
    
    

    所以cte显示了一周中的每一天:

    StartDate
    2022-04-01
    2022-04-08
    2022-04-15
    2022-04-22
    2022-04-29
    

    并选择shows

    job dateL   weeknumber
    1   2022-04-01  1
    2   2022-04-02  1
    3   2022-04-12  2
    4   2022-04-27  4
    5   2022-05-01  -1
    

    我怎样才能把它们联合起来,这样就有了第四列,显示了周数,这周的开始? 谢谢

    0 回复  |  直到 4 年前