mysql - 如何更新特定列中的下一个日期

标签 mysql sql

以下是患者就诊记录的示例表。它有一个 Vdate 列来存储特定患者就诊的日期,还有一个 Visit 列来显示就诊顺序。

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   |
+-------+-------------------------+-------+

我想做的是定义另一列 follow_up 并根据 Visit 顺序插入下一个 Vdate 事件。 我预计我的结果如下:

+-------+------------+------------+
| 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       |
+-------+------------+------------+

正如您在上面看到的,visit_date 列中的所有值都是我从 Vdate 中获取的,而 follow_up 列是下一个 Vdate 每次访问后。最后的 follow_up 行显示 NULL,因为下一次访问(第 5 次访问)尚未发生。

我怎样才能做到这一点?谢谢!

最佳答案

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

Demo

如果你想更新列

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

关于mysql - 如何更新特定列中的下一个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56536306/

相关文章:

mysql - 查询相当于临时表mysql

SQL查询2限制

mysql - 在 MySQL 上创建类型

Mysql连接三张表(其中两张相似)

mysql - 在特定列和行中获得最大值(value)

mysql - 计算值并自动插入列

MySQL:AND/OR/XOR 在哪里可以用作 WHERE 子句中除逻辑运算符之外的任何内容?

mysql - 检查某个单词是否出现在以空格分隔的单词列中

MySQL COUNT 天数

mysql - 选择后删除 - mysql 会保持相同的顺序吗?