我有一個3列(id(int),日期(日期),狀態(bool))的表。按日期順序查找模式
這樣
id date Status
1 2012-10-18 1
1 2012-10-19 1
1 2012-10-20 0
1 2012-10-21 0
1 2012-10-22 0
1 2012-10-23 0
1 2012-10-24 1
1 2012-10-25 0
1 2012-10-26 0
1 2012-10-27 0
1 2012-10-28 1
2 2012-10-19 0
2 2012-10-20 0
2 2012-10-21 0
2 2012-10-22 1
2 2012-10-23 1
假定日期列是連續的,並有日期之間沒有間隙。
我怎樣才能找到所有3個連續的零(在狀態欄)和他們的下一天的狀態?
這樣
id startDate endDate NextDayStatus
1 2012-10-20 2012-10-22 0
1 2012-10-21 2012-10-23 1
1 2012-10-25 2012-10-27 1
2 2012-10-19 2012-10-21 1
表創建腳本和樣本數據
CREATE TABLE [Table1](
[ID] [smallint] NOT NULL,
[Date] [date] NOT NULL,
[Status] [bit] NULL,
CONSTRAINT [PK_table1] PRIMARY KEY CLUSTERED ( [ID] ASC, [Date] ASC))
INSERT INTO [Table1]([ID], [Date], [Status])
SELECT 1, '2012-10-18', 1 UNION ALL
SELECT 1, '2012-10-19', 1 UNION ALL
SELECT 1, '2012-10-20', 0 UNION ALL
SELECT 1, '2012-10-21', 0 UNION ALL
SELECT 1, '2012-10-22', 0 UNION ALL
SELECT 1, '2012-10-23', 0 UNION ALL
SELECT 1, '2012-10-24', 1 UNION ALL
SELECT 1, '2012-10-25', 0 UNION ALL
SELECT 1, '2012-10-26', 0 UNION ALL
SELECT 1, '2012-10-27', 0 UNION ALL
SELECT 1, '2012-10-28', 1 UNION ALL
SELECT 2, '2012-10-19', 0 UNION ALL
SELECT 2, '2012-10-20', 0 UNION ALL
SELECT 2, '2012-10-21', 0 UNION ALL
SELECT 2, '2012-10-22', 1 UNION ALL
SELECT 2, '2012-10-23', 1
更新:
- 如果它很重要,這一步後,我只需要濾除天 這是本月的第一,第十或第20天
- 許多感謝託默勒格和GNB,在我的真正任務的連續零的個數爲,而不是3本樣本中,所以使用9內連接或交叉應用似乎低效
什麼版本的SQL Server? 2012? – gbn
SQL Server 2008 R2 SP2 –
APPLY優於9 JOIN。但是你不在SQL Server 2012上,所以這是你需要的。 – gbn