Найти первый отсутствующее значение
I будет использовать ROW_NUMBER
window function, чтобы назначить «правильный» идентификатор последовательности. Если предположить, что последовательность ID перезагружается каждый раз, когда изменяется идентификатор сотрудника:
SELECT
e.id,
e.name,
e.employee_number,
e.relation,
e.familyid,
ROW_NUMBER() OVER(PARTITION BY e.employeeid ORDER BY familyid) - 1 AS sequenceid
FROM employee_members e
Тогда, я бы фильтровать результат включать только строки с идентификаторами не соответствующей последовательности:
SELECT *
FROM (
SELECT
e.id,
e.name,
e.employee_number,
e.relation,
e.familyid,
ROW_NUMBER() OVER(PARTITION BY e.employeeid ORDER BY familyid) - 1 AS sequenceid
FROM employee_members e
) a
WHERE a.familyid <> a.sequenceid
Опять же, вы должны легко группировать по employee_number
и найти первую недостающую последовательность ID для каждого сотрудника:
SELECT
a.employee_number,
MIN(a.sequence_id) AS first_missing
FROM (
SELECT
e.id,
e.name,
e.employee_number,
e.relation,
e.familyid,
ROW_NUMBER() OVER(PARTITION BY e.employeeid ORDER BY familyid) - 1 AS sequenceid
FROM employee_members e
) a
WHERE a.familyid <> a.sequenceid
GROUP BY a.employee_number
найти весь недостающий Валу эс
Расширение предыдущего запроса, мы можем обнаружить отсутствующее значение каждый раз, когда разница между familyid
и sequenceid
изменений:
-- Warning: this is totally untested :-/
SELECT
b.employee_number,
MIN(b.sequence_id) AS missing
FROM (
SELECT
a.*,
a.familyid - a.sequenceid AS displacement
SELECT
e.*,
ROW_NUMBER() OVER(PARTITION BY e.employeeid ORDER BY familyid) - 1 AS sequenceid
FROM employee_members e
) a
) b
WHERE b.displacement <> 0
GROUP BY
b.employee_number,
b.displacement
мы не можем видеть полные имена столбцов – Hogan
Последнее имя столбца - «familyid». – VAAA
и имя третьего столбца и таблицы? – Hogan