Как обновить следующую дату в определенной колонке - PullRequest
1 голос
/ 11 июня 2019

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

Table aaa

    ID    VDate                   Visit
    10003 2003-09-26 00:00:00.000 1
    10003 2004-05-15 00:00:00.000 2
    10003 2007-01-09 00:00:00.000 3
    10003 2007-07-05 00:00:00.000 4

Я ожидал, что мой результат будет

+-------+------------+------------+
| id    | visit_date | follow_up  |
+-------+------------+------------+
| 10003 | 2003-09-26 | 2004-05-15 |
| 10003 | 2004-05-15 | 2007-01-09 |
| 10003 | 2007-01-09 | 2007-07-05 |
| 10003 | 2007-07-05 | Null       |
+-------+------------+------------+

Ответы [ 3 ]

0 голосов
/ 11 июня 2019

Если у вас уже есть значение и вы знаете id строки, которую вы хотите обновить, тогда вам следует установить это значение:

UPDATE aaa SET follow_up = '2007-07-05' WHERE id = 10004;

Обратите внимание, что в вашем примере все строки имеют одинаковый идентификатор. Должен быть некоторый уникальный идентификатор или, и он может быть добавлен в ваше предложение where для проверки оригинальной даты, которую вы ищете.

0 голосов
/ 11 июня 2019
DECLARE @Table TABLE (ID INT, VDate DATETIME, VISIT INT)
INSERT INTO @Table
    VALUES (10003, '2003-09-26 00:00:00.000', 1), (10003, '2004-05-15 00:00:00.000', 2), (10003, '2007-01-09 00:00:00.000', 3), (10003, '2007-07-05 00:00:00.000', 4)


  SELECT
        T1.ID
       ,CAST(T1.VDate AS DATE) AS visit_date
       ,(SELECT TOP 1
                CAST(T2.VDate AS DATE)
            FROM @Table AS T2
            WHERE T1.ID = T2.ID
            AND T2.VDate > T1.VDate)
        AS follow_up
    FROM @Table AS T1
    ORDER BY VISIT

Демо

Если вы хотите обновить столбец

DECLARE @Table TABLE (ID INT, VDate DATETIME, follow_up DATETIME, VISIT INT)
INSERT INTO @Table (ID, VDate, VISIT)
    VALUES (10003, '2003-09-26 00:00:00.000', 1), (10003, '2004-05-15 00:00:00.000', 2), (10003, '2007-01-09 00:00:00.000', 3), (10003, '2007-07-05 00:00:00.000', 4)

UPDATE T1
SET T1.follow_up = (SELECT TOP 1
        T2.VDate
    FROM @Table T2
    WHERE T1.ID = T2.ID
    AND T2.VDate > T1.VDate)
FROM @TABLE T1

SELECT
    ID
   ,CAST(VDate AS DATE) AS visit_date
   ,CAST(follow_up AS DATE) AS follow_up
FROM @Table

UpdateDemo

0 голосов
/ 11 июня 2019

Если используется MySQL 8, в котором есть поддержка оконных функций:

SELECT ID
     , VDate AS visit_date
     , lead(VDate, 1) OVER (PARTITION BY ID ORDER BY Visit) AS follow_up
FROM aaa
ORDER BY ID, Visit;

должно помочь.

При использовании MySQL 5 может быть что-то вроде

SELECT ID
     , VDate AS visit_date
     , (SELECT VDate FROM aaa AS a2 WHERE a.ID = a2.ID and a.Visit + 1 = a2.Visit) AS follow_up
FROM aaa AS a
ORDER BY ID, Visit;

Форматирование дат оставлено читателю в качестве упражнения.

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