简体   繁体   English

如何在 SQL 中获取过去 12 个月的特定时间窗口

[英]How to get a specific time window in SQL for the past 12 Months

I am looking for a way to get a certain time window of the past 12 Months from current date.我正在寻找一种方法来从当前日期获得过去 12 个月的某个时间窗口。

I want to get every day from the past 12 Months but there is a specific time window in between those dates because there is a start date and an end date.我想获取过去 12 个月的每一天,但这些日期之间有一个特定的时间窗口,因为有开始日期和结束日期。

So one day would be.所以有一天会。

SELECT startdate, enddate
     FROM TableX
      WHERE 
         startdate >= SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()-1), 05, 00) 
     AND enddate <= SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 05, 00)

That would give me yesterdays date "2021-11-14T05:00:00Z" to todays date ("2021-11-15T05:00:00Z") .这将使我昨天的日期 "2021-11-14T05:00:00Z" 到今天的日期 ("2021-11-15T05:00:00Z") 。 Now I want this for the past 12 Months.现在我想要这个过去 12 个月。 Between yesterdays date an todays date are different timestamps that come with a specific value.在昨天的日期和今天的日期之间是具有特定值的不同时间戳。

So I need to sum up every value in beetween that timestamp.所以我需要总结该时间戳之间的每个值。

Using the EOMONTH function you can also calculate the start of the month for a given date.使用 EOMONTH 函数,您还可以计算给定日期的月初。

So this所以这

select 
 CAST(DATEADD(MONTH,-12,DATEADD(DAY,1,EOMONTH(GETDATE(),-1))) AS SMALLDATETIME) AS startDate, 
 CAST(DATEADD(DAY,1,EOMONTH(GETDATE(),-1)) AS SMALLDATETIME) AS endDate

Returns this (when run today, November 2021)返回这个(今天运行时,2021 年 11 月)

startDate开始日期 endDate结束日期
2020-11-01 00:00 2020-11-01 00:00 2021-11-01 00:00 2021-11-01 00:00

The query for the previous 12 months :前 12 个月的查询:

SELECT startdate, enddate
FROM TableX
WHERE startdate >= CAST(DATEADD(MONTH,-12,DATEADD(DAY,1,EOMONTH(GETDATE(),-1))) AS SMALLDATETIME)
  AND enddate < CAST(DATEADD(DAY,1,EOMONTH(GETDATE(),-1)) AS SMALLDATETIME)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM