DB2 SQL 计算嵌套层级
CREATE TABLE log(timestamp TIMESTAMP, event CHAR(3));
insert into log values('2006-03-02 04:12:16.124565','In');
insert into log values('2006-03-02 04:12:19.134514','In');
insert into log values('2006-03-02 04:13:42.424085','Out');
insert into log values('2006-03-02 04:15:31.872452','In');
insert into log values('2006-03-02 04:16:42.004545','In');
insert into log values('2006-03-02 04:17:01.994432','In');
insert into log values('2006-03-02 04:17:23.569474','Out');
insert into log values('2006-03-02 04:22:25.946465','Out');
insert into log values('2006-03-02 04:32:19.543438','In');
insert into log values('2006-03-02 04:46:51.643544','Out');
insert into log values('2006-03-02 04:42:00.836468','Out');
insert into log values('2006-03-02 04:33:58.172535','Out');
TIMESTAMP EVENT
-------------------------- -----
2006-03-02 04:12:16.124565 In
2006-03-02 04:12:19.134514 In
2006-03-02 04:13:42.424085 Out
2006-03-02 04:15:31.872452 In
2006-03-02 04:16:42.004545 In
2006-03-02 04:17:01.994432 In
2006-03-02 04:17:23.569474 Out
2006-03-02 04:22:25.946465 Out
2006-03-02 04:32:19.543438 In
2006-03-02 04:33:58.172535 Out
2006-03-02 04:42:00.836468 Out
2006-03-02 04:46:51.643544 Out
SELECT REPEAT('|', SUM(CASE event
WHEN 'In'
THEN 1
WHEN 'Out'
THEN - 1
END) OVER (
ORDER BY TIMESTAMP
) + CASE event
WHEN 'In'
THEN - 1
ELSE 0
END) || CASE event
WHEN 'In'
THEN '>'
WHEN 'Out'
THEN '<'
END AS nesting
,TIMESTAMP
,event
FROM Log
ORDER BY TIMESTAMP;
NESTING TIMESTAMP EVENT
------- -------------------------- -----
> 2006-03-02 04:12:16.124565 In
|> 2006-03-02 04:12:19.134514 In
|< 2006-03-02 04:13:42.424085 Out
|> 2006-03-02 04:15:31.872452 In
||> 2006-03-02 04:16:42.004545 In
|||> 2006-03-02 04:17:01.994432 In
|||< 2006-03-02 04:17:23.569474 Out
||< 2006-03-02 04:22:25.946465 Out
||> 2006-03-02 04:32:19.543438 In
||< 2006-03-02 04:33:58.172535 Out
|< 2006-03-02 04:42:00.836468 Out
< 2006-03-02 04:46:51.643544 Out