_timestamp throughput_net
2019-05-01 07:46:08.000 15.8
2019-05-01 07:46:38.000 15.8
2019-05-01 07:47:09.000 15.8
2019-05-01 07:47:39.000 15.8
2019-05-01 07:48:09.000 15.8
2019-05-01 07:48:39.000 15.8
2019-05-01 07:49:09.000 15.8
2019-05-01 12:46:52.000 0
2019-05-01 12:47:22.000 0
2019-05-01 12:47:53.000 0
2019-05-01 12:48:23.000 0
2019-05-01 12:48:53.000 0
2019-05-01 12:49:23.000 0
2019-05-01 12:49:53.000 0
2019-05-01 12:50:23.000 0
我每30秒从机器PLC获得的上述值,机器的吞吐量为1500 KG / hr,但是在机器停止期间,吞吐量将类似于上面的数据。
问题是我需要输出像下面的表格
---------------------------------------
| From | To | Period in min|
---------------------------------------
| 07:46:08 | 07:49:09 | 3 |
| 12:46:52 | 12:50:23 | 4 |
---------------------------------------
答案 0 :(得分:0)
天真的方法是聚合。这似乎可以满足您的要求:
select min(_timestamp), max(_timestamp), throughput,
datediff(day, min(_timestamp), max(_timestamp)) as period_in_min
from t
group by througput;
但是,您可能希望将此视为“空白与孤岛”问题。也就是说,0
值可能显示为“ islands”,并且您需要在结果集中为每个岛单独放置一行。
如果是这样,则可以使用不同的行号方法:
select min(_timestamp), max(_timestamp), throughput,
datediff(day, min(_timestamp), max(_timestamp)) as period_in_min
from (select t.*,
row_number() over (order by _timestamp) as seqnum,
row_number() over (partition by throughput order by _timestamp) as seqnum_t
from t
) t
group by (seqnum - seqnum_t), througput;
解释它的工作原理有些棘手。但是,如果您查看子查询的结果,则会看到为什么两个行号值之间的差异标识相邻的常数值。
答案 1 :(得分:0)
如果要将日志分为机器运行或停止的时间段,则可以使用以下代码:
app