sql-server SQL:将每小时的样本分块为7天的平均值

hmtdttj4  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(131)
  • 你好
  • 工具:SQL Server、SSMS 2016、R
  • 数据:从2017年12月31日23:00:00至2021年2月5日08:00:00的每小时样本

需求:将数据分块为7天的块,最好与一年中的某周相一致,并获取每个7天期间的平均值。愿意牺牲一些前端和/或后端数据。希望将数据频率从每年12 x365个点降低到大约52个点。对于R中的最终用途。
问题:A)SQL datepart(week,...)方法不将2018年的前七天视为第1周。认为该周从一周中的某一天开始,而不一定是1月1日。
B)我怀疑SQL datepart(week,...)会在几年的数据中分配重复的周值。因此,如果我按datepart(week...)分组,它是否会合并2018、2019、2020、2021年的第1周?
下面是我的起始查询(AvgDate用于调试):

  1. SELECT datepart(week,Date) Week,
  2. FORMAT(AVG(HeadElev), '###.###') as AvgHeadEl,
  3. COUNT(HeadElev) as Count,
  4. FORMAT(AVG(datepart(Day, Date)), '##.###') as AvgDate
  5. FROM [dbo].[Chickamauga] as CWL
  6. WHERE '20171231' < Date AND Date <= '20181231'
  7. GROUP BY datepart(week,Date)
  8. ORDER BY Week
  9. GO

以下是我的表的外观(我已从原始数据中拆分了日期和时间):

  1. CREATE TABLE [dbo].[SomeLake](
  2. [Date] [date] NULL,
  3. [HourCT] [time](0) NULL,
  4. [HeadElev] [float] NULL,
  5. [TailElev] [float] NULL,
  6. [Flow] [float] NULL
  7. ) ON [PRIMARY]

同样,尝试创建简单的7天样本块并抓取平均值。(不是移动平均值,我只需要每个7天块1个数据点。)我尝试将数据频率从(每小时数据)降低到每周数据。
最终目标是导入到R和使用的时间序列函数中,这些函数不能接受每年的高频率(如365)。尝试将频率降低到52,即每周数据。)
感谢您的帮助!

3hvapo4f

3hvapo4f1#

创建简单的7天样本块并获取平均值。
分组方式如下:

  1. 1+datepart(dy,some_date)/7 week

该函数获取一年中的某一天,并执行整数除法,将它们分组为从0开始的7天时段。

相关问题