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

Оптимизация запроса

$
0
0
DECLARE @t TABLE (
	id int,
	[tm] [smalldatetime]
) 
INSERT INTO @t  VALUES (1, CAST(N'2017-03-16 18:20:00' AS SmallDateTime))
                      ,(2, CAST(N'2017-03-16 08:07:00' AS SmallDateTime))
                      ,(3, CAST(N'2017-03-09 19:37:00' AS SmallDateTime))
                      ,(4, CAST(N'2017-03-08 20:19:00' AS SmallDateTime))
                      ,(5, CAST(N'2017-03-07 04:12:00' AS SmallDateTime))
                      ,(6, CAST(N'2017-03-03 05:12:00' AS SmallDateTime))
                      ,(7, CAST(N'2017-03-01 07:26:00' AS SmallDateTime))
 --SELECT * FROM @t
DECLARE @datScanStart DATE = '20170311';
DECLARE @minRows int = 6;
DECLARE @nRow int = 0;  

WITH c AS
   (SELECT ROW_NUMBER() OVER(ORDER BY tm DESC) r, * FROM @t)
SELECT TOP(1) @nRow = r FROM c WHERE tm < @datScanStart ORDER BY r
-- находим число строк по дате начала сканирования  
IF @nRow < @minRows   -- если < 6 тогда берем первые 6
  SELECT TOP(@minRows) * FROM @t ORDER BY tm DESC
ELSE -- иначе > 6 берем по дате сколько получится 
  SELECT * FROM @t WHERE tm > @datScanStart ORDER BY tm DESC

Viewing all articles
Browse latest Browse all 7251

Trending Articles