我有一個表,其中包含這樣的資料:
| 車輛 | 開始 | 結尾 | 日期 |
|---|---|---|---|
| 卡車A | 一種 | 乙 | 02/01/2021 01:00:00 |
| 卡車A | 乙 | C | 02/01/2021 02:00:00 |
| 卡車A | C | D | 04/01/2021 03:00:00 |
| 卡車B | C | 一種 | 05/01/2021 01:00:00 |
| 卡車B | 一種 | 乙 | 06/01/2021 01:00:00 |
| 卡車 C | C | 乙 | 07/01/2021 01:00:00 |
| 卡車 C | 乙 | C | 08/01/2021 01:00:00 |
| 卡車 C | C | 乙 | 09/01/2021 01:00:00 |
| 卡車 C | 乙 | 一種 | 10/01/2021 01:00:00 |
我需要根據日期獲取每輛車的起點和終點。
例如,卡車 A 在 02/01/2021 01:00:00 從 A 點出發到 B 點。然后卡車 A 在 02/01/2021 02:00:00 從 B 點移動到 C 點。卡車 A 已于 04/01/2021 03:00:00 從 C 點移動到 D 點。
它從 A 點開始,在 D 點結束。
我想得到這樣的結果:
| 車輛 | 開始 | 結尾 | 日期 |
|---|---|---|---|
| 卡車A | 一種 | D | 04/01/2021 03:00:00 |
uj5u.com熱心網友回復:
使用GROUP BY和聚合使用KEEP來獲取FIRST或LAST日期值:
SELECT vehicle,
MIN("START") KEEP (DENSE_RANK FIRST ORDER BY "DATE") AS "START",
MAX("END") KEEP (DENSE_RANK LAST ORDER BY "DATE") AS "END",
MAX("DATE") AS "DATE"
FROM table_name
GROUP BY vehicle
其中,對于樣本資料:
CREATE TABLE table_name (Vehicle, "START", "END", "DATE") AS
SELECT 'Truck A', 'A', 'B', DATE '2021-01-02' INTERVAL '1' HOUR FROM DUAL UNION ALL
SELECT 'Truck A', 'B', 'C', DATE '2021-01-02' INTERVAL '2' HOUR FROM DUAL UNION ALL
SELECT 'Truck A', 'C', 'D', DATE '2021-01-04' INTERVAL '3' HOUR FROM DUAL UNION ALL
SELECT 'Truck B', 'C', 'A', DATE '2021-01-05' INTERVAL '1' HOUR FROM DUAL UNION ALL
SELECT 'Truck B', 'A', 'B', DATE '2021-01-06' INTERVAL '1' HOUR FROM DUAL UNION ALL
SELECT 'Truck C', 'C', 'B', DATE '2021-01-07' INTERVAL '1' HOUR FROM DUAL UNION ALL
SELECT 'Truck C', 'B', 'C', DATE '2021-01-08' INTERVAL '1' HOUR FROM DUAL UNION ALL
SELECT 'Truck C', 'C', 'B', DATE '2021-01-09' INTERVAL '1' HOUR FROM DUAL UNION ALL
SELECT 'Truck C', 'B', 'A', DATE '2021-01-10' INTERVAL '1' HOUR FROM DUAL
輸出:
車輛 開始 結尾 日期 卡車A 一種 D 2021-01-04 03:00:00 卡車B C 乙 2021-01-06 01:00:00 卡車 C C 一種 2021-01-10 01:00:00
db<>
資料庫<>小提琴
uj5u.com熱心網友回復:
使用窗函式 FIRST_VALUE 查找每輛車的第一個和最后一個
SELECT Vehicle
, FirstStart AS "Start"
, LastEnd AS "End"
, MAX("Date") AS "Date"
FROM
(
SELECT Vehicle, "Start", "End", "Date"
, FIRST_VALUE("Start") OVER (PARTITION BY Vehicle ORDER BY "Date") AS FirstStart
, FIRST_VALUE("End") OVER (PARTITION BY Vehicle ORDER BY "Date" DESC) AS LastEnd
FROM yourtable
) q
GROUP BY Vehicle, FirstStart, LastEnd
ORDER BY Vehicle;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/346162.html
上一篇:如何獲得最長的“重疊”單詞
