Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Update ячейки из предыдущей записи  [new]
Lerain
Member

Откуда:
Сообщений: 10
Здравствуйте!
Подскажите как решить такую задачу: нужно заполнить пустые ячейки в столбце 'prev_deadline', датой из столбца 'new_deadline' предыдущей записи (по 'card_id'). Самые первые записи я уже заполнил, остальные никак не получается.

id card_id date new_deadline prev_deadline
1 101 15.02.2015 15:12 30.02.2015 15.02.2015
2 102 14.02.2015 15:27 08.03.2015 14.02.2015
3 101 29.02.2015 12:10 12.03.2015 NULL
4 102 14.02.2015 10:10 29.03.2015 NULL
5 103 18.02.2015 17:10 26.03.2015 10.03.2015
6 101 13.03.2015 11:24 28.03.2015 NULL
7 102 29.03.2015 14:24 05.04.2015 NULL


Должно получится:
id card_id date new_deadline prev_deadline
1 101 15.02.2015 15:12 30.02.2015 15.02.2015
2 102 14.02.2015 15:27 08.03.2015 14.02.2015
3 101 29.02.2015 12:10 12.03.2015 30.02.2015
4 102 14.02.2015 10:10 29.03.2015 08.03.2015
5 103 18.02.2015 17:10 26.03.2015 10.03.2015
6 101 13.03.2015 11:24 28.03.2015 12.03.2015
7 102 29.03.2015 14:24 05.04.2015 29.03.2015
22 янв 16, 20:48    [18718243]     Ответить | Цитировать Сообщить модератору
 Re: Update ячейки из предыдущей записи  [new]
Lerain
Member

Откуда:
Сообщений: 10
версия сервера 2008R2
22 янв 16, 20:51    [18718259]     Ответить | Цитировать Сообщить модератору
 Re: Update ячейки из предыдущей записи  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ячейки в Экселе, а у сервера поля и записи.

Столбец 'prev_deadline' в какой таблице? А 'new_deadline' и 'card_id'?
22 янв 16, 20:53    [18718270]     Ответить | Цитировать Сообщить модератору
 Re: Update ячейки из предыдущей записи  [new]
Lerain
Member

Откуда:
Сообщений: 10
Это все одна таблица с логами по переносам.
22 янв 16, 21:31    [18718441]     Ответить | Цитировать Сообщить модератору
 Re: Update ячейки из предыдущей записи  [new]
londinium
Member

Откуда: Киев
Сообщений: 1199
Если я правильно понял задачу, то надо что-то вроде такого:
WITH CTE AS
(
  SELECT 101 AS CARD_ID,'20150215'AS DATED,'20150228'AS NEWDEADLINE,NULL AS PREVDEADLINE
  UNION ALL
  SELECT 102 AS CARD_ID,'20150214'AS DATED,'20150308'AS NEWDEADLINE, NULL AS PREVDEADLINE
  UNION ALL
  SELECT 101 AS CARD_ID,'20150228'AS DATED,'20150312'AS NEWDEADLINE, NULL AS PREVDEADLINE
  UNION ALL
  SELECT 102 AS CARD_ID,'20150214'AS DATED,'20150329'AS NEWDEADLINE,NULL AS PREVDEADLINE
  UNION ALL
  SELECT 103 AS CARD_ID,'20150218'AS DATED,'20150326'AS NEWDEADLINE,NULL AS PREVDEADLINE
  UNION ALL
  SELECT 101 AS CARD_ID,'20150313'AS DATED,'20150328'AS NEWDEADLINE,NULL AS PREVDEADLINE
  UNION ALL
  SELECT 102 AS CARD_ID,'20150329'AS DATED,'20150405'AS NEWDEADLINE,NULL AS PREVDEADLINE
),
XCTE AS
(
  SELECT C.CARD_ID,C.DATED,C.NEWDEADLINE,C.PREVDEADLINE,
  ROW_NUMBER()OVER(PARTITION BY C.CARD_ID ORDER BY C.NEWDEADLINE ASC)XCOL
  FROM CTE C 
)

SELECT C.CARD_ID,C.DATED,C.NEWDEADLINE,ISNULL(X.NEWDEADLINE,C.DATED) AS PREVDEADLINE
 FROM XCTE C
 LEFT JOIN XCTE X ON C.CARD_ID=X.CARD_ID AND C.XCOL=X.XCOL+1
22 янв 16, 23:18    [18718957]     Ответить | Цитировать Сообщить модератору
 Re: Update ячейки из предыдущей записи  [new]
Lerain
Member

Откуда:
Сообщений: 10
londinium, спасибо! То что надо.
23 янв 16, 17:46    [18720382]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить