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)
你希望在一年的第一天有这样的事情:
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)
| 归档时间: |
|
| 查看次数: |
14642 次 |
| 最近记录: |