我的数据如下。
id device state timestamp
250708 1004-3-007294 9 02/01/2019 9:20
250694 1004-3-007294 8 02/01/2019 9:31
250769 1004-3-007294 7 02/01/2019 10:04
250774 1004-3-007294 5 02/01/2019 10:13
250778 1004-3-007294 4 02/01/2019 10:20
250785 1004-3-007294 11 02/01/2019 10:27
250808 1004-3-007294 4 02/01/2019 10:29
250814 1004-3-007294 11 02/01/2019 10:36
250795 3091-5-007208 7 02/01/2019 10:39
250819 3091-5-007208 5 02/01/2019 10:42
250832 3091-5-007208 4 02/01/2019 10:58
250837 3091-5-007208 11 02/01/2019 11:02
250846 3091-5-007208 4 02/01/2019 11:13
当第一次设备状态从5变为4时,我需要找出所有设备的时差,因为在我的数据库中,设备将不再变为状态5,但它将从4变为11,11变为4。请帮我写查询。
4条答案
按热度按时间au9on6nz1#
7nbnzgx92#
如果您使用的是更高版本的mysql,那么可以使用
LEAD
函数获取每行的下一个状态对于一个设备,它将提供:
这将允许您识别状态何时从5更改为4。只需将上述查询放入子查询中,并应用where子句:
如果您使用的旧版本不支持
LEAD
,则需要使用共同相关的子查询来复制功能:db<>fiddle示例
ctzwtxfj3#
我认为可以使用条件聚合:
kh212irz4#
你可以使用join。以下假设正好有一个5->4转换,因此不必检查它是否是第一个转换:
上例中的左连接确保只匹配连续的转换(例如250774连接到250778和250808,但后者被丢弃)。
在db上演示