[英]How do I code to display every change in data in a mysql database
我有一個表格,其中包含以下格式的數據。
| ID | DateTime | Value |
| 1 | 2019-08-12 05:07:25 | 0 |
| 2 | 2019-08-12 05:08:25 | 1 |
| 3 | 2019-08-12 05:09:25 | 1 |
| 4 | 2019-08-12 05:10:25 | 1 |
| 5 | 2019-08-12 05:11:25 | 0 |
| 6 | 2019-08-12 05:12:25 | 0 |
| 7 | 2019-08-12 05:13:25 | 0 |
| 8 | 2019-08-12 05:14:25 | 1 |
| 9 | 2019-08-12 05:15:25 | 1 |
|10 | 2019-08-12 05:16:25 | 0 |
從上表中,我需要將結果顯示為
Record NO | Start Time | Stop Time |
1 | 2019-08-12 05:08:25 | 2019-08-12 05:11:25 |
2 | 2019-08-12 05:14:25 | 2019-08-12 05:16:25 |
對於記錄 1,開始時間是第一個表 id #2,停止時間是 id 5。
記錄 2 的開始時間是第一個表 id # 8,停止時間是 id 10。
回答你的評論:“ 考慮一下我需要訪問可用數據的情況,我該怎么做? ”
一種方法是使用LEFT JOIN
和派生表(子查詢)的組合。 在第一個子查詢中,我們為Value = 1
每個記錄確定EndTime
。
現在,由於發出具有Value = 1
的連續記錄,我們通過基於一組EndTime
選擇最小值來在外部查詢中進一步過濾掉它。
詢問
SELECT Min(dt.`starttime`) AS `StartTime`,
dt.`endtime`
FROM (SELECT t1.`datetime` AS `StartTime`,
Min(t2.`datetime`) AS `EndTime`
FROM your_table_name AS t1
LEFT JOIN your_table_name AS t2
ON t2.`datetime` > t1.`datetime`
AND t2.`value` = 0
WHERE t1.`value` = 1
GROUP BY t1.`datetime`) AS dt
GROUP BY dt.`endtime`;
| StartTime | endtime |
| ------------------- | ------------------- |
| 2019-08-12 05:08:25 | 2019-08-12 05:11:25 |
| 2019-08-12 05:14:25 | 2019-08-12 05:16:25 |
如果案例與我解釋的情況類似,那么您可以在表1填充數據后每天運行一個cron作業。 在cron作業中,您需要通過DateTime從表1中獲取數據。
foreach($records as $record) {
$current_value = $record->value;
if($previous_value == 0 && $current_value == 1) {
$start_time = $record->DateTime;
}
if($previous_value == 1 && $current_value == 0) {
$end_time = $record->DateTime;
}
$previous_value = $current_value;
}
你需要修復你的表結構,至少,你必須添加一個新列來識別記錄是什么
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.