MS SQL:每 15 分钟将数据流过滤到第一个值

Posted

技术标签:

【中文标题】MS SQL:每 15 分钟将数据流过滤到第一个值【英文标题】:MS SQL: Filter datastream to first value every 15 minutes 【发布时间】:2016-06-29 15:49:53 【问题描述】:

我想应用过滤器将数据过滤到 15 分钟,每 15 分钟只返回 1 行。

我有 2 个表数据,每个表包含 2 列:“Tijd”作为时间戳,“Kanaal 1”作为浮点数。根据程序的频率(表 1)或外部触发器(表 2)向两个表中添加新行。

我当前的代码适用于第一张桌子

select [Tijd], [Kanaal 1] 
FROM Table_Metingen 
WHERE datepart(mi,tijd) % 15 = 0

表一:(定期更新)

Tijd                | Kanaal 1
2016-06-27 00:00:00 | 53
2016-06-27 00:01:00 | 53
2016-06-27 00:02:00 | 53
2016-06-27 00:03:00 | 53
2016-06-27 00:04:00 | 53
2016-06-27 00:05:00 | 53
2016-06-27 00:06:00 | 53
2016-06-27 00:07:00 | 53

表 2:(由外部触发器更新)

Tijd                | Kanaal 1
2016-06-27 00:00:01 | 53
2016-06-27 00:01:02 | 53
2016-06-27 00:01:04 | 53
2016-06-27 00:01:10 | 53
2016-06-27 00:02:04 | 53
2016-06-27 00:05:03 | 53
2016-06-27 00:06:02 | 53
2016-06-27 00:10:01 | 53

当前代码的输出如下: 表一:(定期更新)

Tijd                | Kanaal 1
2016-06-27 00:00:00 | 53
2016-06-27 00:15:00 | 53
2016-06-27 00:30:00 | 53
2016-06-27 00:45:00 | 53
2016-06-27 01:00:00 | 53
2016-06-27 01:15:00 | 53
2016-06-27 01:30:00 | 53
2016-06-27 01:45:00 | 53

表 2:(由外部触发器更新)

Tijd                | Kanaal 1
2016-06-27 00:00:01 | 53
2016-06-27 00:15:02 | 53
2016-06-27 00:30:04 | 53
2016-06-27 00:45:00 | 53
2016-06-27 00:45:2  | 53 < Extra row, not needed
2016-06-27 01:00:01 | 53
2016-06-27 01:15:03 | 53
2016-06-27 01:30:01 | 53
2016-06-27 01:30:05 | 53 < Extra row, not needed
2016-06-27 01:45:02 | 53

【问题讨论】:

您是否考虑过使用time table?如果您有一列包含最近的一刻钟,您可以按此分组。 【参考方案1】:

额外的行是由于您的 Tijd 列中的秒数。 01:30:01 和 01:30:05 都填写了检查分钟%15 = 0。所以要么你去掉查询中的秒数,要么使用带有 row_number() 的 cte 并且只选择所有带有“rownum”的行= 1"(例如)。

【讨论】:

以上是关于MS SQL:每 15 分钟将数据流过滤到第一个值的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server Profiler:如何为“不喜欢”列过滤器指定多个值

cron详解

3 表连接的 MS Access VB SQL 语法

在 Oracle SQL 中按时间间隔聚合数据

每 15-30 分钟在 iOS 上安排一个任务

我如何每 15 分钟获取一个包含 mongodb 字段值的数组