Преобразование логики Python в запрос sql (сопряжение двух статусов из одного столбца)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Преобразование логики Python в запрос sql (сопряжение двух статусов из одного столбца)

Сообщение Anonymous »

Мне нужна помощь с преобразованием моего кода 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 == "Open" 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 == "Open" and req_workflow == "Closed" 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 = []

DataFrame:



TICKET_ID
DATETIMESTANDARD
STATUS




79355138
3.09.2024 11:54 :18 утра
Открыто


79355138
03.09.2024 21:01:12
Открыто


< td>79355138
6.09.2024 16:52:10
Закрыто

79355138
6.09.2024 16:52:12
ОткрытоОткрыто td>


79355138
10.09.2024 16:01:24
Закрыто


79446344
27.08 /2024 13:32:54
Открыто


79446344
11.09.2024 9:40:17
Закрыто


79446344
11.09.2024 9:40:24
Закрыто


79446344
11.09.2024 9:42:14
< td>Открыть



Результат:
  • Он определяет первое состояние Открыто для TICKET_ID и ищет ближайший статус Закрыто
  • Для каждого случая будет повторяться поиск пары открытия и закрытия (будут учитываться только первое открытие и первое закрытие)
Моя проблема в том, что я застрял, поскольку пары могут встречаться более двух раз. Я пробовал Rank в sql, но он возвращает только первый экземпляр пары, но не остальные пары.
Добавляю также свое решение, когда я недавно перешел на снежинку:
SELECT
FOD.TICKET_ID,
FOD.FIRSTOPENDATETIME AS OPEN_DATETIME,
MIN(NC.DATETIMESTANDARD) AS CLOSED_DATETIME
FROM
(
SELECT
TICKET_ID,
MIN(DATETIMESTANDARD) AS FIRSTOPENDATETIME,
STATUS
FROM
DB.TABLE
WHERE
(
(STATUS IN ('Open') AND EVENT_TYPE IN ('Ticket Open'))
OR STATUS IN ('Closed')
)
GROUP BY
TICKET_ID, STATUS
) AS FOD
LEFT JOIN DB.TABLE AS NC ON FOD.TICKET_ID = NC.TICKET_ID AND NC.STATUS = 'Closed' AND NC.DATETIMESTANDARD > FOD.FIRSTOPENDATETIME
WHERE
FOD.STATUS = 'Open'
GROUP BY
FOD.TICKET_ID, FOD.FIRSTOPENDATETIME
ORDER BY
FOD.TICKET_ID ASC, FOD.FIRSTOPENDATETIME ASC


Подробнее здесь: https://stackoverflow.com/questions/791 ... one-column
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»