获取任何一年的第一天和最后一天

use*_*123 3 t-sql sql-server-2012

我目前正在尝试获取任何一年的第一天和最后一天。我有 1950 年的数据,我想获取数据集中该年的第一天到该数据集中该年的最后一天(请注意,该年的最后一天可能不是 12 月 31 日,与 12 月 31 日相同)那一年)。

最初我认为我可以使用 aCTE并调用DATEPART一年中的某一天选择,但这不会正确分区。我还尝试了CTE自连接,但由于一年中的最后一天或第一天可能不同,这也会产生不准确的结果。

例如,使用下面的代码实际上会生成一些MINs MAX,反之亦然,尽管理论上它应该只获取MAX年份的日期和MIN年份的日期:

;WITH CT AS(
    SELECT Points
        , Date
        , DATEPART(DY,Date) DA
    FROM Table
    WHERE DATEPART(DY,Date) BETWEEN 363 AND 366
        OR DATEPART(DY,Date) BETWEEN 1 AND 3
)
SELECT MIN(c.Date) MinYear
    , MAX(c.Date) MaxYear
FROM CT c
GROUP BY YEAR(c.Date)
Run Code Online (Sandbox Code Playgroud)

Joe*_*orn 5

你希望在一年的第一天有这样的事情:

dateadd(year, datediff(year,0, c.Date), 0)
Run Code Online (Sandbox Code Playgroud)

这是今年的最后一天:

--first day of next year -1
dateadd(day, -1, dateadd(year, datediff(year,0, c.Date) + 1, 0)
Run Code Online (Sandbox Code Playgroud)