mysql 显示机器循环的开始和停止日期和时间

whitzsjs  于 2022-10-31  发布在  Mysql
关注(0)|答案(1)|浏览(111)

我有一个表,它是这样的(pec_za_starenje_prva_start_stop):
| 识别码|记录时间|标签1|
| - -|- -|- -|
| 一个|2022年10月25日21时56分19秒|一个|
| 2个|2022年10月26日04时13分24秒|第0页|
| 三个|2022年10月26日05时42分54秒|一个|
| 四个|2022年10月26日12时18分27秒|第0页|
| 五个|2022年10月26日14时29分36秒|一个|
| 六个|2022年10月26日21时22分21秒|第0页|

id              | int   
TimeLogged      | DateTime   
Tag1            | int

“Tag 1”中的数字1应该表示周期已经开始,而0应该表示周期已经结束。因此,我需要如下所示的表:
| 识别码|开始循环|结束循环|总时间|
| - -|- -|- -|- -|
| 一个|2022年10月25日21时56分19秒|2022年10月26日04时13分24秒|377分钟|
| 2个|2022年10月26日05时42分54秒|2022年10月26日12时18分27秒|395分钟|
| 三个|2022年10月26日14时29分36秒|2022年10月26日21时22分21秒|1132分钟|
总时间采用哪种格式并不重要,这只是一个示例。
这是我找到的最接近的东西,但它不能正常工作,因为它只显示开始时间:

SELECT ID,  
       TimeLogged start_cycle,  
       next_TimeLogged end_cycle,  
       TIMEDIFF(next_TimeLogged, TimeLogged) total_time  
FROM (  
  SELECT *, LEAD(TimeLogged) OVER (PARTITION BY ID ORDER BY TimeLogged)  
 next_TimeLogged  
  FROM pec_za_starenje_prva_start_stop  
) t  
WHERE Tag1 = '1'  
ORDER BY start_cycle;
2skhul33

2skhul331#

WITH
cte AS (
  SELECT TimeLogged TimeLoggedIn, 
         LEAD(TimeLogged) OVER win TimeLoggedOut,
         Tag1,
         LEAD(Tag1) OVER win tag2
  FROM pec_za_starenje_prva_start_stop
  WINDOW win AS (ORDER BY TimeLogged)
  )
SELECT ROW_NUMBER() OVER (ORDER BY TimeLoggedIn) ID,
       TimeLoggedIn start_cycle,
       TimeLoggedOut end_cycle,
       TIMESTAMPDIFF(MINUTE, TimeLoggedIn, TimeLoggedOut) total_time
FROM cte
WHERE Tag1 AND !Tag2;

https://dbfiddle.uk/NVW9YGb0

相关问题