ilk eksik değerini
I bul "Doğru" sıra kimlik numarası atamak için ROW_NUMBER
window function kullanır. dizisi kimlik her zaman çalışan kimliği değişiklikleri yeniden varsayarsak: Sonra
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
, ben sadece ayarlı Sonuca filtre olur uyuşmazlık dizisi kimlikleri ile satırları şunlardır: Sonra tekrar
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
, şunları yapmalısınız
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
tüm eksik valu bulma: kolayca employee_number
grup ve her bir çalışan için ilk eksik sekans kimliğini bulmak es önceki sorguyu genişletme
, biz familyid
ve sequenceid
değişiklikler arasında her seferinde bir eksik değerini fark algılayabilir:
-- 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
tam sütun isimlerini göremiyoruz – Hogan
Son sütun adı "familyid". – VAAA
ve 3. sütun ve tablo adı? – Hogan