将python逻辑转换为sql查询

问题描述 投票:0回答:1

我需要帮助将我的 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 上午 打开

结果:

  1. 它将识别 TICKET_ID 的第一个 Open 状态并查找最接近的 Closed 状态
  2. 它将针对每种情况重申寻找开盘和闭盘对(仅考虑首次开盘和首次收盘)

我的问题是我陷入困境,因为配对可能会发生两次以上。我在 sql 中尝试了 Rank,但它只返回第一个配对实例,而不返回其他配对

python sql pandas
1个回答
0
投票

您没有提供 sqlfiddle 链接, 甚至也不提供您当前尚未运行的 SQL。 我同意你的观点,RANK() 不是这项工作的最佳工具。

您正在寻找的是自加入。 你想要建立一种关系 (至少)ticket_id、open_time、close_time 列。 对于待处理的票证,最后一列当然将为 NULL。 对于表别名

a
b
,施加
a.datetimestandard < b.datetimestandard
约束。 注意创建复合索引 如果您愿意,请点击
(ticket_id, datetimestandard)
一个高性能的查询计划。

© www.soinside.com 2019 - 2024. All rights reserved.