У меня есть база данных для отслеживания претензий по платежам.Есть таблица для требований claim
, таблица для ежемесячных платежей claim_month
и таблица, определяющая каждый месяц month
.month
имеет каждую запись по порядку, так что если month_id[1] > month_id[2]
, то вторая цифра раньше, чем первая цифра.
Использование запроса (в целях конфиденциальности добавлена рандомизация paid_to_date
):
SELECT
claim.claim_id,
m.month_id,
claim_month_id,
IF (claim_month.paid_to_date IS NOT NULL, ROUND(RAND(1) * 100), NULL) AS paid_to_date
FROM
claim
INNER JOIN ( SELECT DISTINCT month_id FROM claim_month ) AS m
LEFT JOIN claim_month ON claim.claim_id = claim_month.claim_id
AND m.month_id = claim_month.month_id
Я получаю следующие данные.
INSERT INTO ``(`claim_id`, `month_id`, `claim_month_id`, `paid_to_date`) VALUES (25, 1004, 8584, 41);
INSERT INTO ``(`claim_id`, `month_id`, `claim_month_id`, `paid_to_date`) VALUES (25, 1005, NULL, NULL);
INSERT INTO ``(`claim_id`, `month_id`, `claim_month_id`, `paid_to_date`) VALUES (25, 1006, NULL, NULL);
INSERT INTO ``(`claim_id`, `month_id`, `claim_month_id`, `paid_to_date`) VALUES (25, 1007, NULL, NULL);
INSERT INTO ``(`claim_id`, `month_id`, `claim_month_id`, `paid_to_date`) VALUES (21, 1004, 8580, 87);
INSERT INTO ``(`claim_id`, `month_id`, `claim_month_id`, `paid_to_date`) VALUES (21, 1005, NULL, NULL);
INSERT INTO ``(`claim_id`, `month_id`, `claim_month_id`, `paid_to_date`) VALUES (21, 1006, NULL, NULL);
INSERT INTO ``(`claim_id`, `month_id`, `claim_month_id`, `paid_to_date`) VALUES (21, 1007, NULL, NULL);
INSERT INTO ``(`claim_id`, `month_id`, `claim_month_id`, `paid_to_date`) VALUES (5, 1004, 8564, 14);
INSERT INTO ``(`claim_id`, `month_id`, `claim_month_id`, `paid_to_date`) VALUES (5, 1005, 8627, 9);
Здесь мне нужно заменить NULL на последнее ненулевое наблюдение для каждого claim_id
.
Поскольку я использую MariaDB / MYSQL, функция LAG не позволяет игнорировать значения NULL, что, к сожалению, является идеальным.
Я также изучал использование COALESCE и его разбиение, но это тоже недопустимо.
У меня естьтакже изучал использование пользовательских функций, однако я использую несколько типов данных и не могу понять, как определить функцию, которая не требует установки выходного типа данных.
Я провел все утро, просматривая предыдущие вопросы, однако большинство из них относится к PostgresSQL, который не особенно полезен в этом контексте.Чего мне не хватает?