Вы можете попробовать это:
DECLARE @DataSource TABLE
(
[CreateDate] DATE
,[Amount] INT
,[Description] VARCHAR(18)
);
INSERT INTO @DataSource ([CreateDate], [Amount], [Description])
VALUES ('04/02/2020', 36000, 'First meeting')
,('04/30/2020', 9000, 'CloseWon');
WITH DataSource AS
(
SELECT ROW_NUMBER() OVER (ORDER BY [CreateDate] ASC) AS [FirstRow]
,ROW_NUMBER() OVER (ORDER BY [CreateDate] DESC) AS [LastRow]
,*
FROM @DataSource
)
SELECT DS2.[CreateDate]
,DS1.[Amount]
,DS2.[Description]
FROM DataSource DS1
INNER JOIN DataSource DS2
ON DS1.[FirstRow] = DS2.[LastRow]
WHERE DS1.[FirstRow] = 1;
Идея состоит в том, чтобы использовать ROW_NUMBER
два раза - для определения первого и последнего ряда. Затем просто результат общего табличного выражения для себя.
Если вы хотите сгруппировать данные - например, у вас есть другой столбец, который собирается определить, как записи группируются:
- добавьте столбец (столбцы) к предложению
PARTITION BY
ROW_NUMBER
- при присоединении к результату CTE, объедините эти столбцы также