[英]Mysql Calculate minutes between previous end time and current start for system downtime records
根據系統行,我需要幫助,我需要計算上次結束日期和當前事件的開始日期之間的分鍾差。
這是表格:
id |system |start |end | ------------------------------------------------------------ 2 | system 1 | 2016-01-01 12:00:00 | 2016-01-01 13:00:00 | ------------------------------------------------------------ 3 | system 1 | 2016-01-02 11:00:00 | 2016-01-02 12:00:00 | ------------------------------------------------------------ 5 | system 1 | 2016-01-03 15:00:00 | 2016-01-03 16:00:00 | ------------------------------------------------------------ 6 | system 2 | 2016-01-01 10:00:00 | 2016-01-01 11:00:00 | ------------------------------------------------------------ 7 | system 2 | 2016-01-02 17:00:00 | 2016-01-02 18:00:00 |
結果是:
標識為2和6的兩個系統記錄沒有“結束日期”的先前記錄以進行減法:
id | system | diff_min | --------------------------------- 2 | system 1 | 0 | --------------------------------- 3 | system 1 | 1380 | --------------------------------- 5 | system 1 | 1620 | --------------------------------- 6 | system 2 | 0 | --------------------------------- 7 | system 2 | 1800 | ---------------------------------
您可以使用兩個內置函數來實現
select id, system, TIMESTAMPDIFF(MINUTE, endDate, startDate) diff_min
要么
select id, system, TIMEDIFF(endDate, startDate)/60 as diff_min
select id,system,TIMESTAMPDIFF(MINUTE,end,start) as diff_min from table_name;
下面的查詢執行此操作:
SELECT
id,
system,
IF (@previousSystem = system, TIMESTAMPDIFF(MINUTE ,@previousEndTime,start),
@previousEndTime := 0) diff_min,
@previousSystem := system,
@previousEndTime := end
FROM
system_table,
(
SELECT
@previousSystem := NULL,
@previousEndTime := '0000-00-00 00:00:00'
) var
ORDER BY system, id;
輸出:
對您的給定數據運行以上查詢,您將獲得如下輸出:
id system diff_min
2 system 1 0
3 system 1 1320
5 system 1 1620
6 system 2 0
7 system 2 1800
請忽略查詢結果集中的最后兩列
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.