0

给予:

  • 工具:SQL Server、SSMS 2016、R
  • 数据:从 2017-12-31 23:00:00 到 2021-02-05 08:00:00 开始的每小时样本

想要:将数据分成 7 天的块,理想情况下与一年中的一周一致,并获取每个 7 天期间的平均值。愿意牺牲一些数据前端和/或后端。希望将数据频率从 12x365 点降低到每年 52 点。用于 R 中的最终用途。

问题(S):A)SQL datepart(week,...) 方法不将 2018 年的第一个 7 天视为第 1 周。认为该周从一周中的某一天开始,不一定在 1 月 1 日。

B) 我怀疑 SQL datepart(week,...) 将在几年的数据中分配重复的周值。因此,如果我按日期部分(周...)分组,它不会结合 2018 年、2019 年、2020 年、2021 年的第 1 周吗?

这是我的起始查询(AvgDate 用于调试目的):

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

这是我的表格的样子(我已经从原始数据中拆分了日期和时间):

CREATE TABLE [dbo].[SomeLake](
    [Date] [date] NULL,
    [HourCT] [time](0) NULL,
    [HeadElev] [float] NULL,
    [TailElev] [float] NULL,
    [Flow] [float] NULL
) ON [PRIMARY]

再次尝试创建简单的 7 天样本块并获取平均值。(不是移动平均线,我只需要每 7 天块 1 个数据点。)我正在尝试将数据频率从(每小时数据降低到每周数据。)

最终目标是导入 R 并使用无法接受每年高频率(如 365)的时间序列函数。试图将频率降低到 52,即。每周数据。)

感谢您的帮助!

4

1 回答 1

0

创建简单的 7 天样本块并获取平均值。

按以下方式分组:

1+datepart(dy,some_date)/7 week

它采用一年中的某一天并执行整数除法以将它们分组为 7 天的存储桶,从 0 开始。

于 2021-02-16T21:45:31.150 回答