【发布时间】:2021-11-14 05:14:57
【问题描述】:
我试图在这里找到一些东西,但我没有找到我的用例。我希望你能帮助我。 起初我的桌子是可用的:
| STATION_NUMBER | PART_NO | BOOK_DATE |
|---|---|---|
| 11111 | A | 2021-08-01 6:00:00 |
| 11111 | A | 2021-08-01 6:05:00 |
| 11111 | A | 2021-08-01 6:07:00 |
| 11111 | A | 2021-08-01 6:08:00 |
| 11111 | B | 2021-08-01 7:10:00 |
| 11111 | B | 2021-08-01 7:13:00 |
| 11111 | B | 2021-08-01 7:15:00 |
| 11111 | B | 2021-08-01 7:25:00 |
| 11111 | A | 2021-08-01 8:10:00 |
| 11111 | A | 2021-08-01 8:12:00 |
| 11111 | A | 2021-08-01 8:16:00 |
| 11111 | A | 2021-08-01 8:19:00 |
| 22222 | A | 2021-08-01 6:00:00 |
| 22222 | A | 2021-08-01 6:05:00 |
| 22222 | A | 2021-08-01 6:07:00 |
| 22222 | A | 2021-08-01 6:08:00 |
| 22222 | B | 2021-08-01 7:10:00 |
| 22222 | B | 2021-08-01 7:13:00 |
| 22222 | B | 2021-08-01 7:15:00 |
| 22222 | B | 2021-08-01 7:25:00 |
| 22222 | A | 2021-08-01 8:10:00 |
| 22222 | A | 2021-08-01 8:12:00 |
| 22222 | A | 2021-08-01 8:16:00 |
| 22222 | A | 2021-08-01 8:19:00 |
我想要得到的结果如下:
| STATION_NUMBER | PART_NO | START_BOOK_DATE | END_BOOK_DATE |
|---|---|---|---|
| 11111 | A | 2021-08-01 6:00:00 | 2021-08-01 6:08:00 |
| 11111 | B | 2021-08-01 7:10:00 | 2021-08-01 7:25:00 |
| 11111 | A | 2021-08-01 8:10:00 | 2021-08-01 8:19:00 |
| 22222 | A | 2021-08-01 6:00:00 | 2021-08-01 6:08:00 |
| 22222 | B | 2021-08-01 7:10:00 | 2021-08-01 7:25:00 |
| 22222 | A | 2021-08-01 8:10:00 | 2021-08-01 8:19:00 |
我试图用这个查询来解决它,但我没有达到我的预期
SELECT PART_NO,
STATION_NUMBER,
GROUP_NUMBER,
MIN(BOOK_DATE) START_BOOK_DATE,
MAX(BOOK_DATE) END_BOOK_DATE
FROM(
SELECT PART_NO,
STATION_NUMBER,
BOOK_DATE,
IS_CHANGED,
RANK() OVER (ORDER BY PART_NO,IS_CHANGED) GROUP_NUMBER
FROM(
SELECT PART_NO,
STATION_NUMBER,
BOOK_DATE,
CASE
WHEN NOT LEAD(PART_NO, 1) OVER (ORDER BY BOOK_DATE) = PART_NO
THEN ROWNUM
ELSE 0
END IS_CHANGED
FROM PROD_DATA
WHERE STATION_NUMBER in ('11111','22222')
AND BOOK_DATE BETWEEN TO_TIMESTAMP('01.08.2021 05:00:00', 'DD.MM.YYYY HH24:MI:SS') and TO_TIMESTAMP('01.08.2021 12:00:00', 'DD.MM.YYYY HH24:MI:SS')
ORDER BY BOOK_DATE
)ORDER BY BOOK_DATE
) GROUP BY STATION_NUMBER, PART_NO, GROUP_NUMBER
我必须按 STATION_NUMBER 和 PART_NUMBER 分组,但我需要从时间顺序的角度来看第一个和最后一个 BOOK_DATE。 PART_NUMBER 和/或 STATION_NUMBER 更改是我计算新行的触发器。
【问题讨论】:
-
感谢您的提示。我会更新的
-
已更新。首先为我尝试:)
标签: sql oracle gaps-and-islands