Mysql 在表中的增量上求和的sql查询
我有存储在表中的传入传感器数据。传感器的每条记录都有几个“计数器”列。计数器只是时间上的快照。示例记录如下所示 |id | sensor | counter 1 | counter 2 | timestamp 1 5 100 200 10:00 AM 2 5 125 210 10:01 AM ... 60 5 1000 800 11:00 AM |id |传感器|计数器1 |计数器2 |时间戳 15100200上午10:00 25125210上午10:01 ... 60 5 1000 800上午11:00 我有数千个这样的传感器及时发送计数器值的快照。我需要做的是,给定一个时间段,比如上午10点到上午11点,将记录之间的增量映射到图表上。增量始终被带到上一条记录。Mysql 在表中的增量上求和的sql查询,mysql,sql,database-design,linked-list,Mysql,Sql,Database Design,Linked List,我有存储在表中的传入传感器数据。传感器的每条记录都有几个“计数器”列。计数器只是时间上的快照。示例记录如下所示 |id | sensor | counter 1 | counter 2 | timestamp 1 5 100 200 10:00 AM 2 5 125 210 10:01 AM ... 60 5 1000
获取连续记录之间增量的SQL查询是什么?
我的第二个问题是,什么是一个好的表设计来存储这样的自引用数据。可能是一个链表,每条记录都指向上一条记录 通用SQL是:
select t.*,
(select counter1 from t t2 where t2.sensor = t.sensor and t2.timestamp < t.timestamp
order by timestamp desc
limit 1
) prevCounter1
from t
在MySQL中,最好输入prevID
。如果没有,则传感器、时间戳上的索引应能提供合理的性能。通用SQL为:
select t.*,
(select counter1 from t t2 where t2.sensor = t.sensor and t2.timestamp < t.timestamp
order by timestamp desc
limit 1
) prevCounter1
from t
在MySQL中,最好输入
prevID
。如果没有,则传感器、时间戳
上的索引应能为您提供合理的性能。由于此表可能有数百万条记录,按时间戳排序不是一个杀手吗?@Abe。考虑到你的桌子设计,我不知道你有选择的余地。如果您有一个prevId
列,那么您可以通过简单的连接来获取上一个值。您告诉我们,考虑到需求,选择使用prevId列不是一个坏主意,对吗?b、 t.w您提供的查询并没有真正得到增量,只是执行counter1Alias1-counter1Alias2的问题。道歉,如果它是基本的q,我在sql中几乎是新手。@Abe。这个问题是为了让你知道该怎么做。由于公式依赖于数据库(未标记),因此您可能必须对其进行返工。您可以将示例中的counter1
替换为id
,以获取以前的id,然后加入所需的值。而且,如果您需要支持这种类型的查询,并且可以使其保持最新,那么使用prevId
列是一个好主意。@Abe,一个包含大量记录的表的解决方案是where子句。由于该表可能包含数百万条记录,按时间戳排序不是一个杀手吗?@Abe。考虑到你的桌子设计,我不知道你有选择的余地。如果您有一个prevId
列,那么您可以通过简单的连接来获取上一个值。您告诉我们,考虑到需求,选择使用prevId列不是一个坏主意,对吗?b、 t.w您提供的查询并没有真正得到增量,只是执行counter1Alias1-counter1Alias2的问题。道歉,如果它是基本的q,我在sql中几乎是新手。@Abe。这个问题是为了让你知道该怎么做。由于公式依赖于数据库(未标记),因此您可能必须对其进行返工。您可以将示例中的counter1
替换为id
,以获取以前的id,然后加入所需的值。而且,如果您需要支持这种类型的查询,并且可以使其保持最新状态,那么使用prevId
列是一个好主意。@Abe,一个包含大量记录的表的解决方案是where子句。