【发布时间】: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