以下是患者就诊记录的示例表。它有一个 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
如果你想更新列
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
关于mysql - 如何更新特定列中的下一个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56536306/