0 голосов
спросил от в категории SQL
Если посмотреть на ожидаемые данные, это будет выглядеть в порядке даты. Вы можете назначить номер строки на этой основе, который заменяет идентификатор, используемый в решении 1 (и поэтому будет работать с идентификатором GUID в качестве идентификатора), например.
DECLARE @Table TABLE (ID INT IDENTITY(1,1) NOT NULL, TheDate DATE) INSERT @Table(TheDate)  values ('03-MAR-2017'), ('04-MAR-2017'), ('08-MAR-2017'), ('01-APR-2017') ;WITH CTE AS (     SELECT ID, TheDate     ,ROW_NUMBER() OVER(ORDER BY TheDate) AS rn     FROM @Table ) SELECT CTE.ID, CTE.TheDate As Date1, NXT.TheDate As Date2 FROM CTE LEFT OUTER JOIN CTE NXT ON NXT.rn = CTE.rn + 1
Если у вас есть SQL Server 2012 (а не версия Express) или более поздняя версия (включая 2014 Express), вы можете вместо этого использовать функции Window (far neater)
SELECT ID, TheDate, LEAD(TheDate,1) OVER (ORDER BY TheDate) FROM @Table

Пожалуйста, войдите или зарегистрируйтесь чтобы ответить на этот вопрос.

0 голосов
ответил от
Это работает с вашими текущими данными; однако вы сами по себе, если вы переключаетесь на GUID

DECLARE @Table TABLE (ID INT IDENTITY(1,1) NOT NULL, TheDate DATE) INSERT @Table(TheDate)  values ('03/03/2017'), ('04/03/2017'), ('08/03/2017'), ('01/04/2017') SELECT a.ID      , Date1 = a.TheDate      , Date2 = b.TheDate FROM            @Table  a LEFT OUTER JOIN @Table  b ON a.ID + 1 = b.ID ORDER BY A.ID

Категории

Добро пожаловать на сайт DraftingCode Q&A, где вы можете задавать вопросы и получать ответы от других членов сообщества.

Связанных вопросов не найдено

...