我有此表,其中包含id
,status_one
,status_two
,status_three
和`date'。这是一种日志,每隔几分钟就会读取文本文件并填充表。
示例数据:
Id | Status One | Status Two | Status Three | Date
--- | ---------- | ---------- | ------------ | ----
101 | 5 | 2 | 2 | 2017-04-13 13:48:32 <-
102 | 4 | 2 | 1 | 2017-04-13 13:48:32
103 | 5 | 2 | 2 | 2017-04-13 13:48:32
101 | 5 | 2 | 1 | 2017-04-13 13:38:32 <-
102 | 3 | 2 | 3 | 2017-04-13 13:38:32
103 | 5 | 2 | 1 | 2017-04-13 13:38:32
101 | 3 | 2 | 1 | 2017-04-13 13:28:32 <
102 | 4 | 2 | 2 | 2017-04-13 13:28:32
103 | 5 | 3 | 1 | 2017-04-13 13:28:32
101 | 5 | 2 | 2 | 2017-04-13 13:18:32 <
102 | 4 | 2 | 2 | 2017-04-13 13:18:32
103 | 5 | 3 | 1 | 2017-04-13 13:18:32
在我的示例中,具有ID 101
的记录的Status One
已将5
设置为10分钟。(从2017-04-13 13:38:32
到2017-04-13 13:48:32
(。
带有ID 101
的记录的CC_11已将2
设置为30分钟。
Status Three
的先前值与当前的值不匹配,因此它一直是2
0分钟。
如何在状态保持相同价值的最后一次记录之间获得时间差。
id
101
Id | Status One | Status Two | Status Three
--- | ---------- | ---------- | ------------
101 | 2017-04-13 13:38:32 | 2017-04-13 13:18:32 | 2017-04-13 13:48:32
尝试以下:
SELECT a.Id, a.status_one, MAX(a.date) - MIN(a.date) as difference
FROM
(SELECT id, status_one, date
FROM table
WHERE status_one = 5
AND Id IN (SELECT id
FROM table
WHERE status_one = 5
GROUP BY id
HAVING COUNT(*) > 1)
ORDER BY date DESC
LIMIT 2) a
GROUP BY a.Id, a.status_one;
它应该给您status_one
的时间差,您也可以使用类似的逻辑来计算status_two
和status_three
的时间差。