Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在表中的增量上求和的sql查询_Mysql_Sql_Database Design_Linked List - Fatal编程技术网

Mysql 在表中的增量上求和的sql查询

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

我有存储在表中的传入传感器数据。传感器的每条记录都有几个“计数器”列。计数器只是时间上的快照。示例记录如下所示

|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点,将记录之间的增量映射到图表上。增量始终被带到上一条记录。
获取连续记录之间增量的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子句。