【问题标题】:SQL: Chunking hourly samples into 7-day averagesSQL:将每小时样本分块为 7 天平均值
【发布时间】:2021-05-19 18:51:10
【问题描述】:

给予:

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

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

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

B) 我怀疑 SQL datepart(week,...) 会在几年的数据中分配重复的周值。因此,如果我按 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,即。每周数据。)

感谢您的热心帮助!

【问题讨论】:

  • 365 Mod 7 = 2,所以你总会遇到问题。在这些额外的日子里,您做什么?
  • 感谢 Charlieface 的清晰评论。我开始从其他帖子中看到,R 将处理时间序列数据的非整数频率,并且有可用的库将开始日期转换为十进制数据。看起来我将在 SQL 中创建 7 天的块,然后让 R 处理奇数的年度频率和开始日期。 stackoverflow.com/questions/22188660/…

标签: r sql-server datepart smss


【解决方案1】:

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

按以下方式分组:

1+datepart(dy,some_date)/7 week

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

【讨论】:

    猜你喜欢
    • 2020-11-04
    • 2022-07-15
    • 1970-01-01
    • 2022-11-29
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多