我有一個這樣的mysql資料庫
---------------------------------------------------------------------------
| startdate | starttime | enddate | endtime | status |
---------------------------------------------------------------------------
| 2020-03-04 | 04:30:00 | 2020-03-04 | 09:00:00 | running |
| 2020-03-04 | 11:30:00 | 2020-03-04 | 19:30:00 | running |
| 2020-03-05 | 05:00:00 | 2020-03-05 | 11:15:00 | running |
| 2020-03-05 | 12:30:00 | 2020-03-05 | 22:08:00 | running |
---------------------------------------------------------------------------
我想知道是否可能,創建一個 php(或類似的)腳本來插入日期/時間之間的所有間隔,并創建一個狀態為“已停止”的行。
例子:
---------------------------------------------------------------------------
| startdate | starttime | enddate | endtime | status |
---------------------------------------------------------------------------
| 2020-03-04 | 00:00:00 | 2020-03-04 | 04:30:00 | stopped | *created by this script
| 2020-03-04 | 04:30:00 | 2020-03-04 | 09:00:00 | running |
| 2020-03-04 | 09:00:00 | 2020-03-04 | 11:30:00 | stopped | *
| 2020-03-04 | 11:30:00 | 2020-03-04 | 19:30:00 | running |
etc.
---------------------------------------------------------------------------
這可能嗎?
對不起我的英語
uj5u.com熱心網友回復:
假設您使用的是 MySQL 8 ,您可以使用LAG()函式將當前記錄的開始日期/時間與前一條記錄的結束日期/時間進行比較。當存在差異時,使用這些值來創建缺失的時間跨度:
- 上一個結束日期/時間 ==> 新的開始日期/時間
- 當前開始日期/時間 ==> 新的結束日期/時間
詢問:
此查詢將回傳丟失的記錄,如果需要,您可以將其插入到表中。
WITH cte AS (
-- using single datetime value for simpler logic
SELECT *
, LAG (STR_TO_DATE(CONCAT(EndDate, ' ', EndTime), '%Y-%m-%d %H:%i:%s'), 1, NULL)
OVER (ORDER BY EndDate, EndTime) AS PrevEndDateTime
, STR_TO_DATE(CONCAT(StartDate, ' ', StartTime), '%Y-%m-%d %H:%i:%s') AS StartDateTime
FROM YourTable
)
SELECT CAST( DATE_FORMAT(COALESCE(PrevEndDateTime, StartDate),'%Y-%m-%d') AS DATE ) AS StartDate
, CAST( DATE_FORMAT(COALESCE(PrevEndDateTime, StartDate),'%H:%i:%s') AS TIME ) AS StartTime
, StartDate AS EndDate
, StartTime AS EndTime
, 'stopped' AS Status
FROM cte
WHERE StartDateTime <> PrevEndDateTime
OR PrevEndDateTime IS NULL
測驗資料:
開始日期 | 開始時間 | 結束日期 | 結束時間 | 狀態 :--------- | :-------- | :--------- | :------- | :------ 2020-03-02 | 01:30:00 | 2020-03-02 | 09:00:00 | 跑步 2020-03-04 | 04:30:00 | 2020-03-04 | 09:00:00 | 跑步 2020-03-04 | 11:30:00 | 2020-03-04 | 19:30:00 | 跑步 2020-03-05 | 05:00:00 | 2020-03-05 | 11:15:00 | 跑步 2020-03-05 | 12:30:00 | 2020-03-05 | 22:08:00 | 跑步
缺失記錄:
開始日期 | 開始時間 | 結束日期 | 結束時間 | 狀態 :--------- | :-------- | :--------- | :------- | :------ 2020-03-02 | 00:00:00 | 2020-03-02 | 01:30:00 | 停止 2020-03-02 | 09:00:00 | 2020-03-04 | 04:30:00 | 停止 2020-03-04 | 09:00:00 | 2020-03-04 | 11:30:00 | 停止 2020-03-04 | 19:30:00 | 2020-03-05 | 05:00:00 | 停止 2020-03-05 | 11:15:00 | 2020-03-05 | 12:30:00 | 停止
demo db<>fiddle here
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/442416.html
標籤:javascript php mysql 日期 约会时间
