sql - 用 2 个循环更新表
问题描述
我必须更新表 TSW 中的“End_A”。(SQL Server 2016)
外循环 --> 选择 Start_a, C_ID from dbo.tsw group by TypeC order by start_A desc。
在外循环中,我选择第一个记录集 Start_A(不为空)
内部循环 --> 从 dbo.tsw 组中选择 Up_Date,其中 CA = 'whatever' 和 (update > Start_A) group by TypeC order by Up_Date desc。
在内部循环中,我搜索相应的记录集(按 TypeC 分组)以更新 End_A。它是下一个记录集 Up_Date > Start_a,条件为 ...
从外部 lopp 中选择 c_ID 并使用内部循环中的 Up_date 更新 End_A 使用内部循环中选择的 Up_Date 更新 End_A。
选择下一个对应的记录集(按TypeC分组)更新End_A,直到按TypeC分组结束。
从外循环中选择下一个记录集,然后步骤 2....
始终按 TypeC 分组。TypeC 是更新多个 End_A 的“块”。
这是更新前的表格(示例):
C_ID|TypeC| CA | Up_Date | Start_A | End_A |
----------------------------------------------------------------
14 |123 | AA |2019-01-05 02:15:00|2019-01-03 | |
24 |678 | AA |2019-02-05 08:00:05| | |
12 |123 | AA |2019-01-07 03:27:12| | |
19 |123 | BB |2019-03-05 |2019-05-17 | |
10 |456 | BB |2019-11-05 |2019-10-01 | |
23 |123 | BB |2019-07-05 | | |
8 |123 | BB |2019-01-05 |2019-02-01 | |
7 |678 | BB |2019-01-05 |2020-08-09 | |
1 |678 | BB |2019-01-05 | | |
2 |678 | CC |2020-09-05 |2019-10-14 | |
29 |678 | AA |2020-01-05 |2020-01-05 | |
15 |123 | CC |2019-06-05 | | |
17 |678 | CC |2022-01-05 | | |
55 |123 | CC |2019-09-05 | | |
77 |678 | CC |2019-01-05 | | |
47 |678 | AA |2019-01-05 | | |
110 |456 | BC |2019-11-05 | | |
Start Loop_1 select TSW.Start where start_A is not null from TSW group by TypeC Start Loop_2 --(Up_Date next emyty End_A with 'Up_Date') Update TSW.End_a = Loop_2_End_A select Up_Date from where TSW.Start_A is not null and "Loop_1 TypeC" = "Loop_2 TypeC" and CA = "blabla" as Loop_2_End_A order by up_date group by TypeC then select next relevant Up_Date from Loop_2 end loop2 select next from Loop_1 end loop_1
- C_ID 14--> 来自下一个 TypeC '123' 其中 CA <> 'AA'(C_ID = 19)
- C_ID 19 --> 来自下一个 TypeC '123' 其中 CA <> 'BB'(C_ID = 15)
- C_ID 10 --> 来自下一个 TypeC '456' 其中 CA <> 'BB'(C_ID =110)
- C_ID 8 --> 来自下一个 TypeC '123' 其中 CA <> 'BB'(C_ID = 15)
- C_ID 7 --> 来自下一个 TypeC '678' 其中 CA <> 'BB'(C_ID = 17)
这是更新后的表格:
C_ID|TypeC| CA | Up_Date | Start_A | End_A |
--------------------------------------------------------------------
14 |123 | AA |2019-01-05 02:15:00|2019-01-03 |2019-03-05|
24 |678 | AA |2019-02-05 08:00:05| | |
12 |123 | AA |2019-01-07 03:27:12| | |
19 |123 | BB |2019-03-05 |2019-05-17 |2019-06-05|
10 |456 | BB |2019-11-05 |2019-10-01 |2019-11-05|
23 |123 | BB |2019-07-05 | | |
8 |123 | XX |2019-01-05 |2019-02-01 |2019-06-05|
7 |678 | BB |2019-01-05 |2020-08-09 |2020-09-05|
1 |678 | BB |2019-01-05 | | |
2 |678 | CC |2020-09-05 |2019-10-14 |2021-05-01|
29 |678 | AA |2020-01-05 |2020-01-05 |2022-01-05|
15 |123 | CC |2019-06-05 | | |
17 |678 | CC |2022-01-05 | | |
55 |123 | CC |2019-09-05 | | |
77 |678 | CC |2019-01-05 | | |
47 |678 | AA |2019-01-05 | | |
110 |456 | BC |2019-11-05 | | |
如何在 SQL 中使用内部循环中的这些选定信息更新表?提前致谢。
解决方案
推荐阅读
- java - 存储实时数据库快照的位置
- android - Android 权限错误(ls: /storage/emulated/: Permission denied)
- makefile - 关于makefile中包含指令的问题
- pandas - 在不规则时间进行测量时,如何插入时间序列
- c - 使用 DFS 通过 AST 递归
- laravel - 使用非唯一的路由键名?
- r - 消除 dplyr 冗余函数行
- java - Spring Boot 在 application.properties 中重命名 server.port
- .net-core - RabbitMq .net 核心客户端并行处理多条消息(不是一个一个)
- python-3.x - 可以在 scipy.optimize.fmin_cg 的 args 中使用 scipy 稀疏矩阵吗?