SQL настройка флага просрочки - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь пометить запись, которая перешла в статус «Просрочено» в SQL. Я рассчитываю статус «Просрочено», используя простое вычисление даты «Текущий срок платежа», и по истечении срока платежа запускается флаг просроченного платежа. Моя проблема заключается в том, что, как только эта запись была просрочена, мой клиент хочет, чтобы она оставалась просроченной. (Они могут изменить сроки исполнения на внешнем интерфейсе, что при установке в будущем сделало бы запись больше не просроченной.) Есть ли способ, которым я могу установить какой-то фиксированный флаг, чтобы однажды Срок исполнения> Текущий дата первого раза в рабочем процессе, когда запись отображается как просроченная, пока она не будет закрыта.

Пример флага просроченной задолженности:

Select
    current_date as report_date
    ,issue_id
    ,issue_due_date
    ,case when report_date > issue_due_date then 'Current'
    when report_date < issue_due_date then 'Past Due'
From Table

Однако в течение всего рабочего процесса проблемы пользователи могут чтобы изменить срок выполнения, установив его на дату в будущем, при котором приведенный выше запрос будет отображаться как «Текущий». Я хотел бы выяснить способ, которым, как только проблема попадает в «Просрочку» независимо от того, что происходит с продвижением записи, она всегда остается «Просрочкой».

SQL: Redshift

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Пересмотренный ответ:

Поскольку вы используете Redshift, не существует идеального способа реализовать это. Вам понадобится какое-то задание cron / agent или триггер (который не поддерживается Redshift). Если вы используете другую службу какого-либо типа для задания по расписанию, вы можете выполнить следующий запрос, чтобы обновить столбец PastDue (битовый тип) до 0 или 1.

UPDATE table_name
SET PastDue = 1
WHERE DueDate < CurrentDate AND PastDue=0

Теперь, когда флаг PastDue имеет установлен, даже если они изменят дату выполнения в записи, флаг PastDue останется истинным (1).

0 голосов
/ 28 февраля 2020

Обычно в таких таблицах у вас будет закрыта дата или дата завершения. Если это так, вы можете использовать это, чтобы определить, просрочен ли он до завершения. На SQL сервере будет работать что-то вроде приведенного ниже:

CASE WHEN COALESCE(Closed_date,GETDATE())>DUE_DATE then 'Yes'
ELSE 'No'
END as Past_due_flag

Надеюсь, это поможет.

Редактировать: случай, упомянутый в комментарии, не идеален. Вы можете сделать это, сохранив снимок данных или просроченного статуса заявки. Если данные обновляются в режиме реального времени, то мало что можно сделать, потому что, если заявка просрочена сегодня, а дата оплаты изменилась сегодня, вы не узнаете, если у вас нет снимка данных предыдущего дня. , Я бы предложил использовать журнал изменений, отслеживая все эти изменения в таблице. Надеюсь, что это имеет смысл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...