SQL:按大小写分组以设置两个条件的值

SQL : Group by with case to set values for both conditions

提问人:user3737377 提问时间:11/26/2021 最后编辑:Daiuser3737377 更新时间:11/26/2021 访问量:42

问:

前提条件:[我使用周作为星期日作为一周的第一天] 我有如下表“#TT”

Column -> D_Date
----------
2020-12-27 |
2020-12-28 |
2020-12-29 |
2020-12-30 |
2020-12-31 |
2021-01-01 |
2021-01-02 |

我想获取日期的周数,如果年末有新的一年开始,我想将新年的第一周标记为 0,如果它的天数贡献少于 4 天,即

根据美国周

2020-12-27 from this **53rd** start
2020-12-28
2020-12-29
2020-12-30
2020-12-31
2021-01-01
2021-01-02  and end at here

上面从 27 到 31 是 2020 年的 5 天,而 2021 年的 1 和 2 是 2 天,因此大多数天是 2020 年而不是 2021 年。 现在我想将 2021 年的周数标记为 0,表示日期 1 和 2 而不是 1

我正在使用下面的查询,但它也减少了我最少一年的周数。如何实现这一点?请帮帮我。

SELECT
    
    DATEPART( week, D_Date ),
    
    CASE
        WHEN COUNT( DATEPART( week, D_Date ) ) > 1 THEN MAX( DATEPART(week, D_Date ) - 1 ) 
        ELSE DATEPART( week, D_Date )
   END AS [State]
FROM
    #tt
GROUP BY
    DATEPART( year, D_Date ),
    DATEPART( week, D_Date );
SQL 案例 datepart maxdate

评论

0赞 Dai 11/26/2021
您到底在使用什么RDBMS?
0赞 Dai 11/26/2021
您是否考虑过使用来获取周数?DATEPART( iso_week, ... )
0赞 user3737377 11/26/2021
我正在使用 MS SQL 2017
0赞 user3737377 12/3/2021
问题是当年终和新年开始时,发生的情况是,从 [周日 - 周六] 开始的元旦每周的天数少于 4 天,然后是上一年的那些天数,即 2020-12-27、28、29、30、31 是 5 天,而 2021-01-01、02 只有 2 天,因此 2021 年的第一周将从 2021-01-03 开始。所以 DATEPART( week, D_Date ) 函数将 2021-01-01 和 02 作为第 1 周,但我需要一些机制,以便这应该算作第 0 周,而第 1 周应该算作 2021-01-03 至 2021-01-09 天。在这一年里,我可以做到,但使用 -1,但我需要它用于任何范围

答: 暂无答案