我有以下 Oracle 查询:
SELECT id,
DECODE(state, 'Open', state_in, NULL) AS open_in,
DECODE(state, 'Not Open', state_in, NULL) AS open_out,
FROM (
SELECT id,
CASE WHEN state = 'Open'
THEN 'Open'
ELSE 'Not Open'
END AS state,
TRUNC(state_time) AS state_in
FROM ...
)
这给了我如下数据:
id open_in open_out
1 2009-03-02 00:00:00
1 2009-03-05 00:00:00
1 2009-03-11 00:00:00
1 2009-03-26 00:00:00
1 2009-03-24 00:00:00
1 2009-04-13 00:00:00
我想要的是这样的数据:
id open_in open_out
1 2009-03-02 00:00:00 2009-03-05 00:00:00
1 2009-03-11 00:00:00 2009-03-24 00:00:00
也就是说,保留所有唯一的id
/open_in
对,并与它们最早open_out
配对open_in
。给定的 可以有任意数量的唯一open_in
值,也可以有任意数量id
的唯一open_out
值。唯一的id
/open_in
可能没有匹配的open_out
值,在这种情况下open_out
应该是null
该行。
我觉得一些分析功能,也许LAG
或LEAD
,在这里会很有用。也许我需要MIN
与PARTITION
.