Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all articles
Browse latest Browse all 7251

Задачка однако

$
0
0
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)

Viewing all articles
Browse latest Browse all 7251

Trending Articles