Как получить данные предыдущих строк в SQL Server - PullRequest
0 голосов
/ 23 мая 2018

Я хотел бы получить данные из предыдущего ряда.Я использовал функцию LAG, но не получил ожидаемый результат.

Таблица: -

col1  col2  col3
ABCD    1   Y
ABCD    2   N
ABCD    3   N
EFGH    4   N
EFGH    5   Y
EFGH    6   N
XXXX    7   Y

Ожидаемый результат

col1 col2 col3  col4
ABCD    1   A   NULL
ABCD    2   B   A
ABCD    3   C   B
EFGH    4   A   NULL
EFGH    5   B   A
EFGH    6   E   B
XXXX    7   F   NULL

Col4 должен содержать данные из предыдущей строкигруппировка по значению в Кол1.Пожалуйста, дайте мне знать, как этого достичь.

Ответы [ 4 ]

0 голосов
/ 24 мая 2018

Спасибо всем за ответы.Используя функцию задержки с разделом, я получил ожидаемый результат.Я пропустил ранее используемый раздел и из-за этого получал неправильные результаты.

0 голосов
/ 23 мая 2018

Предполагается, что SQL Server 2012 или более поздняя версия ...

SELECT
  *,
  LAG(col3) OVER (PARTITION BY col1 ORDER BY col2) AS col4
FROM
  yourTable

Если вы используете SQL Server 2008 или более позднюю версию ...

SELECT
  *,
  (
     SELECT TOP(1) previous.col3
       FROM yourTable   AS previous
      WHERE previous.col1 = yourTable.col1
        AND previous.col2 < yourTable.col2
   ORDER BY previous.col2 DESC
  )
    AS col4
FROM
  yourTable
0 голосов
/ 23 мая 2018

Если вы используете 2008 или более раннюю версию, попробуйте следующее:

    select t1.col1, t1.col2, t1.col3, t2.col3 as col4
    from table1 t1
    left join table1 t2 on t1.col1 = t2.col1 and t1.col2 - 1 = t2.col2

хотя функция lag () - это колени пчелы.Используйте это, если можете.

0 голосов
/ 23 мая 2018

Использование lag() функция

select *, lag(col3) over (partition by col1 order by col2) as col4
from table t;

Однако Вы также можете использовать subquery, если ваш SQL не имеет LAG()

select *,   
        (select top 1 col3
         from table
         where col1 = t.col1 and col2 < t.col2
         order by col2 desc
        ) as col4
from table t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...