我有一張這樣的表:
| ID | 檢查 | 型別 | 地點編號 | 用戶身份 |
|---|---|---|---|---|
| 1 | 2021-12-13 13:00:00 | 在 | 1 | 1 |
| 2 | 2021-12-13 13:10:00 | 在 | 2 | 1 |
| 3 | 2021-12-13 14:00:00 | 出去 | 1 | 1 |
| 4 | 2021-12-13 15:00:00 | 在 | 1 | 1 |
| 5 | 2021-12-13 16:00:00 | 出去 | 1 | 1 |
| 6 | 2021-12-13 17:00:00 | 出去 | 2 | 1 |
| 7 | 2021-12-13 17:00:00 | 在 | 2 | 1 |
| 8 | 2021-12-13 18:00:00 | 出去 | 2 | 1 |
而且我不知道如何撰寫一個選擇查詢來產生這樣的結果:
| 簽入 | 簽出 | 地點編號 | 用戶身份 |
|---|---|---|---|
| 2021-12-13 13:00:00 | 2021-12-13 14:00:00 | 1 | 1 |
| 2021-12-13 13:10:00 | 2021-12-13 17:00:00 | 2 | 1 |
| 2021-12-13 15:10:00 | 2021-12-13 16:00:00 | 1 | 1 |
| 2021-12-13 17:10:00 | 2021-12-13 18:00:00 | 2 | 1 |
所以基本上,結果將顯示成對的 2 行簽入和簽出為一行。
uj5u.com熱心網友回復:
一個使用選項 LEAD
SELECT check_in, CASE WHEN type_out = 'out' THEN check_out ELSE NULL END check_out, place_id, user_id
FROM (
SELECT dt_check check_in, `type` type_in, LEAD(dt_check) OVER w check_out, LEAD(`type`) OVER w type_out, place_id, user_id
FROM in_out
WINDOW w AS (PARTITION BY place_id, user_id ORDER BY dt_check ASC)
) u
WHERE type_in = 'in'
ORDER BY check_in
演示
uj5u.com熱心網友回復:
SELECT t1.dtCheck dtCheckin,
t2.dtCheck dtCheckOut,
placeId,
userId
FROM table t1
JOIN table t2 USING (placeId, userId)
WHERE t1.type = 'in'
AND t2.type = 'out'
AND t1.dtCheck < t2.dtCheck
AND NOT EXISTS ( SELECT NULL
FROM table t3
WHERE t1.dtCheck < t3.dtCheck
AND t3.dtCheck < t2.dtCheck
AND (t1.placeId, t1.userId) = (t3.placeId, t3.userId) )
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/380025.html
標籤:mysql
上一篇:SQLSTATE[HY000][2002]沒有那個檔案或目錄(SQL:select*frominformation_schema.tableswheretable_schema=homeandtabl
