Последняя запись и первая запись в отдельных столбцах - PullRequest
0 голосов
/ 01 мая 2020

У меня есть таблица, как показано ниже, и мне нужно получить первую запись в столбце 2 и последнюю запись в столбце 1 и 3 на основе createDate (column1)

Пожалуйста, помогите с запросом

column1     column2  column3
CreateDate  Amount   Description 
04/02/2020  36000    First meeting 
04/30/2020  9000     CloseWon

Вывод I нужно

column1     column2  column3
CreateDate  Amount   Description 
04/30/2020  36000     CloseWon

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Все поддерживаемые версии SQL Сервер поддерживает FIRST_VALUE и LAST_VALUE оконные функции - так что это может быть так просто, как это:

SELECT DISTINCT FIRST_VALUE(CreateDate) OVER(ORDER BY CreateDate DESC) As CreateDate,
       FIRST_VALUE(Amount) OVER(ORDER BY CreateDate) As Amount,
       FIRST_VALUE(Description) OVER(ORDER BY CreateDate DESC) As Description 
FROM TableName
0 голосов
/ 01 мая 2020

Вы можете попробовать это:

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, объедините эти столбцы также
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...