我有下表:
row_num customer_status effective_from_datetime
------- ------------------ -----------------------
1 Active 2011-01-01
2 Active 2011-01-02
3 Active 2011-01-03
4 Suspended 2011-01-04
5 Suspended 2011-01-05
6 Active 2011-01-06
Run Code Online (Sandbox Code Playgroud)
我正在尝试获得以下结果,即具有相同状态的连续行合并为一行,并具有有效的起始和日期范围:
customer_status effective_from_datetime effective_to_datetime
--------------- ----------------------- ---------------------
Active 2011-01-01 2011-01-04
Suspended 2011-01-04 2011-01-06
Active 2011-01-06 NULL
Run Code Online (Sandbox Code Playgroud)
我可以得到一个递归CTE,根据下一行输出正确的effective_to_datetime,但是在合并范围时遇到问题.
用于生成样本数据的代码:
CREATE TABLE #temp
(
row_num INT IDENTITY(1,1),
customer_status VARCHAR(10),
effective_from_datetime DATE
)
INSERT INTO #temp
VALUES
('Active','2011-01-01')
,('Active','2011-01-02')
,('Active','2011-01-03')
,('Suspended','2011-01-04')
,('Suspended','2011-01-05')
,('Active','2011-01-06')
Run Code Online (Sandbox Code Playgroud) 今天是星期二.
为什么我运行这个SQL语句,它说它不是星期二?
SELECT
CASE
WHEN TO_CHAR(sysdate, 'Day') = 'Tuesday' THEN 'Its Tuesday'
ELSE 'Its Not Tuesday'
END AS case_result,
TO_CHAR(sysdate, 'Day') AS day
FROM DUAL
Run Code Online (Sandbox Code Playgroud)
返回:
CASE_RESULT DAY
It's Not Tuesday Tuesday
Run Code Online (Sandbox Code Playgroud)