我使用 MariaDB 儲存了 Log,希望可以使用 SQL 語法撈出並合併開始跟結束的時間
來源 Log 表如下
+------+-------+------------------+---------------------+
| No |ID | Serial_Number | Time |
+------+-------+------------------+---------------------+
| 719 | 193 | A000000000000001 | 2018-01-08 13:57:08 |
| 720 | 195 | A000000000000001 | 2018-01-08 13:57:09 |
| 721 | 196 | A000000000000001 | 2018-01-08 13:57:15 |
| 722 | 195 | A000000000000001 | 2018-01-08 13:57:18 |
| 723 | 196 | A000000000000001 | 2018-01-08 13:57:18 |
| 724 | 195 | A000000000000001 | 2018-01-08 13:57:21 |
| 725 | 196 | A000000000000001 | 2018-01-08 13:57:22 |
| 726 | 193 | A000000000000002 | 2018-01-08 13:57:24 |
| 727 | 195 | A000000000000001 | 2018-01-08 13:57:25 |
| 728 | 196 | A000000000000001 | 2018-01-08 13:57:27 |
| 729 | 195 | A000000000000002 | 2018-01-08 13:57:28 |
| 730 | 196 | A000000000000002 | 2018-01-08 13:57:30 |
| 731 | 195 | A000000000000002 | 2018-01-08 13:57:31 |
| 732 | 196 | A000000000000002 | 2018-01-08 13:57:33 |
| 733 | 197 | A000000000000001 | 2018-01-08 13:57:34 |
| 734 | 195 | A000000000000002 | 2018-01-08 13:57:36 |
| 735 | 196 | A000000000000002 | 2018-01-08 13:57:37 |
| 736 | 197 | A000000000000002 | 2018-01-08 13:57:39 |
+------+-------+------------------+---------------------+
No 為流水號
ID 193 為登入系統、195為 Request 檔案、196 為 Download 檔案、197 為登出系統
Serial_Number 為序號
Time 時間
希望可以產出如下面的結果,再請各位先進指教,謝謝
+------------------+---------------------+---------------------+
| Serial_Number | Start_Time | End_Time |
+------------------+---------------------+---------------------+
| A000000000000001 | 2018-01-08 13:57:08 | 2018-01-08 13:57:34 |
| A000000000000002 | 2018-01-08 13:57:24 | 2018-01-08 13:57:39 |
+------------------+---------------------+---------------------+
如果是要取得同一Serial Number的Start & End Time,用Group by組合就可以了。
登入系統時間必為最小時間,登出系統時間必為最大時間,應該不需要ID欄位作判斷條件。
SELECT Serial_Number, MIN(Time) AS Start_Time, MAX(Time) AS End_Time
FROM your_table
GROUP BY Serial_Number;
用 sqlfiddle 比較執行時間,這方法真的比較快,謝謝你。
Haoming 及 zdey 的方法我第一次看到,到今天才知道同一個表可以用兩次,跑跑大的方法也很新鮮,長知識了 XDD
感謝各位大大的鼎力相助,耗時耗腦解惑我的問題。
謝謝!!
select loga.serial_no , loga.timetxt as Start_Time , logb.timetxt as End_Time
from log loga,log logb
where loga.serial_no = logb.serial_no
and loga.id=193
and logb.id=197
執行結果參考這裡
http://tpcg.io/gmshXA
我的話還是會選擇ID來判斷,不喜歡MAX跟MIN~(個人偏好)。
另外想請問haoming怎麼比較執行時間阿,他都跳來跳去的XD
想看看join會不會比較快。
select loga.serial_no , loga.timetxt as Start_Time , logb.timetxt as End_Time
from log loga join log logb on loga.serial_no = logb.serial_no
where loga.id=193 and logb.id=197