我需要帮助将我的 Python 代码转换为 SQL:
req_id_mem = ""
req_workflow_mem = ""
collect_state_main = []
collect_state_temp = []
for req_id, req_datetime, req_workflow in zip(df["TICKET_ID"], df["DATETIMESTANDARD"], df["STATUS"]):
if req_id_mem == "" or req_id_mem != req_id:
req_id_mem = req_id
req_workflow_mem = ""
collect_state_temp = []
if req_workflow_mem == "" and req_workflow == "Pending Complete" and req_id_mem == req_id:
req_workflow_mem = req_workflow
collect_state_temp.append(req_id)
collect_state_temp.append(req_workflow)
collect_state_temp.append(req_datetime)
if req_workflow_mem == "Pending Complete" and req_workflow == "Inforce" and req_id_mem == req_id:
req_workflow_mem = req_workflow
collect_state_temp.append(req_workflow)
collect_state_temp.append(req_datetime)
collect_state_main.append(collect_state_temp)
collect_state_temp = []
数据框:
TICKET_ID | 日期时间标准 | 状态 |
---|---|---|
79355138 | 9/3/2024 11:54:18 上午 | 打开 |
79355138 | 9/3/2024 9:01:12 下午 | 打开 |
79355138 | 9/6/2024 4:52:10 下午 | 已关闭 |
79355138 | 9/6/2024 4:52:12 下午 | 打开 |
79355138 | 9/10/2024 4:01:24 下午 | 已关闭 |
79446344 | 8/27/2024 1:32:54 下午 | 打开 |
79446344 | 9/11/2024 9:40:17 上午 | 已关闭 |
79446344 | 9/11/2024 9:40:24 上午 | 已关闭 |
79446344 | 9/11/2024 9:42:14 上午 | 打开 |
结果:
我的问题是我陷入困境,因为配对可能会发生两次以上。我在 sql 中尝试了 Rank,但它只返回第一个配对实例,而不返回其他配对
您没有提供 sqlfiddle 链接, 甚至也不提供您当前尚未运行的 SQL。 我同意你的观点,RANK() 不是这项工作的最佳工具。
您正在寻找的是自加入。 你想要建立一种关系 (至少)ticket_id、open_time、close_time 列。 对于待处理的票证,最后一列当然将为 NULL。 对于表别名
a
和 b
,施加 a.datetimestandard < b.datetimestandard
约束。
注意创建复合索引
如果您愿意,请点击 (ticket_id, datetimestandard)
一个高性能的查询计划。