SQL Fiddle
Oracleの11グラムR2スキーマのセットアップ:1
CREATE TABLE TB_STATUS(
ID INTEGER PRIMARY KEY,
EVENT_DATE DATE NOT NULL,
REOPEN_DATE DATE
);
INSERT INTO TB_STATUS
SELECT 1, TIMESTAMP '2013-01-16 16:16:00', NULL FROM DUAL UNION ALL
SELECT 2, TIMESTAMP '2013-01-16 16:38:00', NULL FROM DUAL UNION ALL
SELECT 3, TIMESTAMP '2013-01-16 18:18:00', NULL FROM DUAL UNION ALL
SELECT 4, TIMESTAMP '2013-01-15 00:00:00', NULL FROM DUAL UNION ALL
SELECT 5, TIMESTAMP '2013-01-16 16:36:00', TIMESTAMP '2013-01-16 00:00:00' FROM DUAL UNION ALL
SELECT 6, TIMESTAMP '2013-01-16 17:12:00', TIMESTAMP '2013-01-16 00:00:00' FROM DUAL UNION ALL
SELECT 7, TIMESTAMP '2014-01-04 09:00:00', TIMESTAMP '2014-01-04 00:00:00' FROM DUAL UNION ALL
SELECT 8, TIMESTAMP '2014-01-05 14:00:00', TIMESTAMP '2014-01-05 00:00:00' FROM DUAL UNION ALL
SELECT 9, TIMESTAMP '2014-01-04 11:00:00', NULL FROM DUAL UNION ALL
SELECT 10, TIMESTAMP '2014-01-04 16:00:00', NULL FROM DUAL UNION ALL
SELECT 11, TIMESTAMP '2013-08-04 11:00:00', NULL FROM DUAL UNION ALL
SELECT 12, TIMESTAMP '2013-08-15 01:00:00', NULL FROM DUAL;
CREATE VIEW TB_STATUS_MINS AS
SELECT ID,
EVENT_DATE, -- CASE WHEN REOPEN_DATE IS NULL THEN EVENT_DATE END,
REOPEN_DATE
FROM (
SELECT t.*,
LAG(REOPEN_DATE, 1, DATE '1970-01-01') OVER (ORDER BY EVENT_DATE) AS prev_reopen
FROM TB_STATUS t
)
WHERE reopen_date IS NOT NULL
OR prev_reopen IS NOT NULL
問合せ:
SELECT *
FROM TB_STATUS_MINS
Results:
| ID | EVENT_DATE | REOPEN_DATE |
|----|----------------------|----------------------|
| 4 | 2013-01-15T00:00:00Z | (null) |
| 5 | 2013-01-16T16:36:00Z | 2013-01-16T00:00:00Z |
| 2 | 2013-01-16T16:38:00Z | (null) |
| 6 | 2013-01-16T17:12:00Z | 2013-01-16T00:00:00Z |
| 3 | 2013-01-16T18:18:00Z | (null) |
| 7 | 2014-01-04T09:00:00Z | 2014-01-04T00:00:00Z |
| 9 | 2014-01-04T11:00:00Z | (null) |
| 8 | 2014-01-05T14:00:00Z | 2014-01-05T00:00:00Z |
出典
2017-11-07 08:44:38
MT0
EVENT_DATEまでに注文しますか? –
発注は不要です。理解を深めるために順番に注文します。 –