CREATE TABLE #t( [id] [int] NOT NULL, [c_Id] [char](3) NOT NULL, [dTime] [smalldatetime] NOT NULL, [is1] [bit] NOT NULL, [is2] [bit] NOT NULL, [is3] [bit] NOT NULL); INSERT #t ([id], [c_Id], [dTime], [is1], [is2], [is3]) VALUES (1, N'111', CAST(N'2017-03-09 08:17:00' AS SmallDateTime), 0, 0, 0) ,(2, N'111', CAST(N'2017-03-09 08:10:00' AS SmallDateTime), 0, 0, 0) ,(3, N'111', CAST(N'2017-03-09 08:01:00' AS SmallDateTime), 0, 1, 0) ,(4, N'111', CAST(N'2017-03-08 20:05:00' AS SmallDateTime), 1, 1, 0) ,(5, N'111', CAST(N'2017-03-08 17:47:00' AS SmallDateTime), 0, 0, 0) ,(6, N'111', CAST(N'2017-03-08 15:25:00' AS SmallDateTime), 0, 0, 1) ,(7, N'111', CAST(N'2017-03-08 12:38:00' AS SmallDateTime), 0, 1, 0) ,(8, N'111', CAST(N'2017-03-08 07:06:00' AS SmallDateTime), 0, 1, 0) ,(9, N'111', CAST(N'2017-03-07 08:12:00' AS SmallDateTime), 1, 1, 0) ,(10, N'111', CAST(N'2017-03-07 05:33:00' AS SmallDateTime), 0, 0, 0) ,(11, N'112', CAST(N'2017-02-09 08:17:00' AS SmallDateTime), 0, 1, 0) ,(12, N'112', CAST(N'2017-02-09 08:10:00' AS SmallDateTime), 0, 1, 0) ,(13, N'112', CAST(N'2017-02-09 08:01:00' AS SmallDateTime), 0, 1, 0) ,(14, N'112', CAST(N'2017-02-08 20:05:00' AS SmallDateTime), 1, 1, 0) ,(15, N'112', CAST(N'2017-02-08 17:47:00' AS SmallDateTime), 0, 0, 0) ,(16, N'112', CAST(N'2017-02-08 15:25:00' AS SmallDateTime), 0, 0, 0) ,(17, N'112', CAST(N'2017-02-08 12:38:00' AS SmallDateTime), 0, 1, 0) ,(18, N'112', CAST(N'2017-02-08 07:06:00' AS SmallDateTime), 0, 1, 0) ,(19, N'112', CAST(N'2017-02-07 08:12:00' AS SmallDateTime), 1, 1, 0) ,(20, N'112', CAST(N'2017-02-07 05:33:00' AS SmallDateTime), 0, 0, 0) ,(21, N'112', CAST(N'2017-01-08 17:47:00' AS SmallDateTime), 0, 0, 0) ,(22, N'112', CAST(N'2017-01-08 15:25:00' AS SmallDateTime), 0, 0, 1) ,(23, N'112', CAST(N'2017-01-08 12:38:00' AS SmallDateTime), 0, 0, 0) ,(24, N'112', CAST(N'2017-01-08 07:06:00' AS SmallDateTime), 0, 1, 0) ,(25, N'112', CAST(N'2017-01-07 08:12:00' AS SmallDateTime), 1, 1, 0) ,(26, N'112', CAST(N'2017-01-07 05:33:00' AS SmallDateTime), 0, 0, 0) SELECT * FROM #t ORDER BY dTime DESC; DROP TABLE #t; -- Дана упорядоченная последовательнось по c_Id asc и dTime desc -- подмножество по c_Id считается правильным, если выполнены следующие условия, -- при последовательном проходе снизу вверх - для is1(dTime1) = 1 -- должно существовать is2(dTime2) = 1, где dTime2 >= dTime1 и is3(dTime3) = 1, где dTime3 > dTime1 -- либо набор завершается без is3(dTime3) = 1 -- иными словами - всегда должны чередоваться 1 слева направо. И только полсле появления 1 в is3 -- разрешается 1 в is1 --В результирующий набор должна попасть строка нарушившая условия чередования 1 -- ,(14, N'112', CAST(N'2017-02-08 20:05:00' AS SmallDateTime), 1, 1, 0)
↧
Задачка однако
↧