NTSB investigations
20,992 cases where the phase of flight was Approach.
Cases, newest first
Query with SQL
duckdb -csv -c "WITH phase_names(main, name) AS (VALUES (100, 'Prior to flight'), (150, 'Standing'), (200, 'Pushback/towing'), (250, 'Taxi'), (300, 'Takeoff'), (350, 'Initial climb'), (400, 'Enroute'), (450, 'Maneuvering'), (500, 'Approach'), (550, 'Landing'), (600, 'Emergency descent'), (650, 'Uncontrolled descent'), (700, 'Post-impact'), (750, 'After landing'), (800, 'Other'), (990, 'Unknown')),
crosswalk(code, main, name) AS (VALUES (500, 150, 'Standing'), (501, 150, 'Standing - pre-flight'), (502, 150, 'Standing - starting engine(s)'), (503, 150, 'Standing - engine(s) operating'), (504, 150, 'Standing - engine(s) not operating'), (505, 150, 'Standing - idling rotors'), (510, 250, 'Taxi'), (511, 200, 'Taxi - pushback/tow'), (512, 250, 'Taxi - to takeoff'), (513, 250, 'Taxi - from landing'), (514, 250, 'Taxi - aerial'), (520, 300, 'Takeoff'), (521, 300, 'Takeoff - roll/run'), (522, 350, 'Takeoff - initial climb'), (523, 300, 'Takeoff - aborted'), (530, 400, 'Climb'), (531, 400, 'Climb - to cruise'), (540, 400, 'Cruise'), (541, 400, 'Cruise - normal'), (542, 400, 'Maneuvering - holding (IFR)'), (550, 400, 'Descent'), (551, 400, 'Descent - normal'), (552, 600, 'Descent - emergency'), (553, 650, 'Descent - uncontrolled'), (560, 500, 'Approach'), (561, 500, 'Approach - VFR pattern - downwind'), (562, 500, 'Approach - VFR pattern - base turn'), (563, 500, 'Approach - VFR pattern - base leg/base to final'), (564, 500, 'Approach - VFR pattern - final approach'), (565, 500, 'Go-around (VFR)'), (566, 500, 'Approach - IAF to FAF/outer marker (IFR)'), (567, 500, 'Approach - FAF/outer marker to threshold (IFR)'), (568, 500, 'Circling (IFR)'), (569, 500, 'Missed approach (IFR)'), (570, 550, 'Landing'), (571, 550, 'Landing - flare/touchdown'), (572, 550, 'Landing - roll'), (573, 550, 'Landing - aborted'), (574, 550, 'Emergency landing'), (575, 550, 'Emergency landing after takeoff'), (576, 600, 'Emergency descent/landing'), (580, 450, 'Maneuvering'), (581, 450, 'Maneuvering - aerial application'), (582, 450, 'Maneuvering - turn to reverse direction'), (583, 450, 'Maneuvering - turn to landing area (emergency)'), (590, 450, 'Hover'), (591, 450, 'Hover - in ground effect'), (592, 450, 'Hover - out of ground effect'), (600, 800, 'Other'), (610, 990, 'Unknown')),
current_codes AS (
SELECT e.case_mkey, TRY_CAST(e.\"tier1Number\" AS INTEGER) AS code,
row_number() OVER (PARTITION BY e.case_mkey ORDER BY coalesce(e.\"isDefiningEvent\", false) DESC, e.position) AS n
FROM 'https://openairdocs.org/data/latest/ntsb_events.parquet' e
WHERE e.aircrafts_position = 1 AND e.\"tier1Number\" GLOB '[1-9][0-9]*'
AND (e.\"isDefiningEvent\" OR e.case_mkey IN (SELECT \"mKey\" FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' WHERE \"isPre1982\"))
),
phases AS (
SELECT case_mkey, 'current' AS scheme, code, CASE WHEN code >= 990 THEN 990 ELSE code // 50 * 50 END AS main
FROM current_codes WHERE n = 1
UNION ALL
SELECT o.case_mkey, 'older', o.\"phaseOfFlightCode\", w.main
FROM 'https://openairdocs.org/data/latest/ntsb_occurrences.parquet' o JOIN crosswalk w ON w.code = o.\"phaseOfFlightCode\"
WHERE o.aircrafts_position = 1 AND o.\"occurrenceNumber\" = 1 AND o.case_mkey NOT IN (SELECT case_mkey FROM current_codes)
),
case_phases AS (
SELECT p.*, c.\"eventDate\", c.\"highestInjuryLevel\" = 'Fatal' AS fatal, a.aircraft_model_code
FROM phases p JOIN 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c ON c.\"mKey\" = p.case_mkey
LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = p.case_mkey AND a.position = 1
WHERE c.\"eventDate\" >= DATE '1962-01-01' AND p.main IN (SELECT main FROM phase_names)
)
SELECT c.\"ntsbNumber\", c.\"eventDate\", c.\"eventType\", c.\"eventCity\", c.\"eventStateOrRegion\", a.n_number, a.\"aircraftMake\", a.\"aircraftModel\", c.\"highestInjuryLevel\", c.\"totalFatal\", c.\"completionStatus\", c.report_url
FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = c.\"mKey\" AND a.position = 1
WHERE c.\"mKey\" IN (SELECT case_mkey FROM case_phases WHERE main = 500)
ORDER BY c.\"eventDate\" DESC, c.\"ntsbNumber\" DESC"Prints the whole list as CSV. It reads the release’s Parquet files over HTTPS, so there’s nothing to download first. Install DuckDB to run it.
WITH phase_names(main, name) AS (VALUES (100, 'Prior to flight'), (150, 'Standing'), (200, 'Pushback/towing'), (250, 'Taxi'), (300, 'Takeoff'), (350, 'Initial climb'), (400, 'Enroute'), (450, 'Maneuvering'), (500, 'Approach'), (550, 'Landing'), (600, 'Emergency descent'), (650, 'Uncontrolled descent'), (700, 'Post-impact'), (750, 'After landing'), (800, 'Other'), (990, 'Unknown')),
crosswalk(code, main, name) AS (VALUES (500, 150, 'Standing'), (501, 150, 'Standing - pre-flight'), (502, 150, 'Standing - starting engine(s)'), (503, 150, 'Standing - engine(s) operating'), (504, 150, 'Standing - engine(s) not operating'), (505, 150, 'Standing - idling rotors'), (510, 250, 'Taxi'), (511, 200, 'Taxi - pushback/tow'), (512, 250, 'Taxi - to takeoff'), (513, 250, 'Taxi - from landing'), (514, 250, 'Taxi - aerial'), (520, 300, 'Takeoff'), (521, 300, 'Takeoff - roll/run'), (522, 350, 'Takeoff - initial climb'), (523, 300, 'Takeoff - aborted'), (530, 400, 'Climb'), (531, 400, 'Climb - to cruise'), (540, 400, 'Cruise'), (541, 400, 'Cruise - normal'), (542, 400, 'Maneuvering - holding (IFR)'), (550, 400, 'Descent'), (551, 400, 'Descent - normal'), (552, 600, 'Descent - emergency'), (553, 650, 'Descent - uncontrolled'), (560, 500, 'Approach'), (561, 500, 'Approach - VFR pattern - downwind'), (562, 500, 'Approach - VFR pattern - base turn'), (563, 500, 'Approach - VFR pattern - base leg/base to final'), (564, 500, 'Approach - VFR pattern - final approach'), (565, 500, 'Go-around (VFR)'), (566, 500, 'Approach - IAF to FAF/outer marker (IFR)'), (567, 500, 'Approach - FAF/outer marker to threshold (IFR)'), (568, 500, 'Circling (IFR)'), (569, 500, 'Missed approach (IFR)'), (570, 550, 'Landing'), (571, 550, 'Landing - flare/touchdown'), (572, 550, 'Landing - roll'), (573, 550, 'Landing - aborted'), (574, 550, 'Emergency landing'), (575, 550, 'Emergency landing after takeoff'), (576, 600, 'Emergency descent/landing'), (580, 450, 'Maneuvering'), (581, 450, 'Maneuvering - aerial application'), (582, 450, 'Maneuvering - turn to reverse direction'), (583, 450, 'Maneuvering - turn to landing area (emergency)'), (590, 450, 'Hover'), (591, 450, 'Hover - in ground effect'), (592, 450, 'Hover - out of ground effect'), (600, 800, 'Other'), (610, 990, 'Unknown')),
current_codes AS (
SELECT e.case_mkey, TRY_CAST(e."tier1Number" AS INTEGER) AS code,
row_number() OVER (PARTITION BY e.case_mkey ORDER BY coalesce(e."isDefiningEvent", false) DESC, e.position) AS n
FROM 'https://openairdocs.org/data/latest/ntsb_events.parquet' e
WHERE e.aircrafts_position = 1 AND e."tier1Number" GLOB '[1-9][0-9]*'
AND (e."isDefiningEvent" OR e.case_mkey IN (SELECT "mKey" FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' WHERE "isPre1982"))
),
phases AS (
SELECT case_mkey, 'current' AS scheme, code, CASE WHEN code >= 990 THEN 990 ELSE code // 50 * 50 END AS main
FROM current_codes WHERE n = 1
UNION ALL
SELECT o.case_mkey, 'older', o."phaseOfFlightCode", w.main
FROM 'https://openairdocs.org/data/latest/ntsb_occurrences.parquet' o JOIN crosswalk w ON w.code = o."phaseOfFlightCode"
WHERE o.aircrafts_position = 1 AND o."occurrenceNumber" = 1 AND o.case_mkey NOT IN (SELECT case_mkey FROM current_codes)
),
case_phases AS (
SELECT p.*, c."eventDate", c."highestInjuryLevel" = 'Fatal' AS fatal, a.aircraft_model_code
FROM phases p JOIN 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c ON c."mKey" = p.case_mkey
LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = p.case_mkey AND a.position = 1
WHERE c."eventDate" >= DATE '1962-01-01' AND p.main IN (SELECT main FROM phase_names)
)
SELECT c."ntsbNumber", c."eventDate", c."eventType", c."eventCity", c."eventStateOrRegion", a.n_number, a."aircraftMake", a."aircraftModel", c."highestInjuryLevel", c."totalFatal", c."completionStatus", c.report_url
FROM 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c LEFT JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = c."mKey" AND a.position = 1
WHERE c."mKey" IN (SELECT case_mkey FROM case_phases WHERE main = 500)
ORDER BY c."eventDate" DESC, c."ntsbNumber" DESCRun it at the DuckDB prompt, or in any tool that reads Parquet over HTTPS. More ways to query the release are on Use the data.
NTSB NYC76FGT12Accident · No injuriesClosedSchweizer 2-33 · Julian, PANTSB NYC76FGT10Accident · Minor injuriesClosedSchweizer 1-23D · Wingate, PANTSB MKC76FCG35Accident · No injuriesClosedCessna 150L · Springfield, MONTSB IAD76AI033Accident · 5 fatalClosedMitsubishi MU-2K · Jefferson City, TNNTSB DEN76FTC20Accident · No injuriesClosedPiper PA-18 · Casper, WYNTSB DCA76AZ011Accident · Serious injuriesClosedBoeing 727 · Raleigh, NCNTSB ANC76AAG71Accident · Minor injuriesClosedStinson 108 · Port Alsworth, AKNTSB NYC76DHA17Accident · No injuriesClosedSchweizer 1-26A · Hainesburg, NJNTSB OAK76DVM13Accident · No injuriesClosedPiper PA-24 · San Luis Obspo, CANTSB IAD76II031Incident · No injuriesClosedNihon YS-11 · Jacksonville, NCNTSB DEN76FQA24Accident · No injuriesClosedCessna 206 · Abiquiu, NMNTSB ANC76DAG64Accident · No injuriesClosedMaule M-4210 · Anchorage, AKNTSB MIA76FKG31Accident · No injuriesClosedCessna 182 · Atlanta, GANTSB OAK76DVM12Accident · No injuriesClosedPiper PA-28 · King City, CANTSB LAX76FUM11Accident · Serious injuriesClosedKraehe V · San Luis Obspo, CANTSB IAD76FKM16Accident · Serious injuriesClosedCessna 172 · Wadesboro, NCNTSB OAK76AP025Accident · 2 fatalClosedAeronca 11AC · Lincoln, CANTSB MKC76FCG30Accident · Minor injuriesClosedPiper J-3 · Grain Valley, MONTSB FTW76FPM12Accident · No injuriesClosedMooney M20C · Tulsa, OKNTSB LAX76DYA24Accident · No injuriesClosedCessna 210L · Lost Hills, CANTSB IAD76FID15Accident · Minor injuriesClosedAmer Avco AA-1A · Ashland, VANTSB FTW76DRG28Accident · No injuriesClosedAlon A-2 · San Antonio, TXNTSB MKC76FER35Accident · Minor injuriesClosedCessna 150B · South St Paul, MNNTSB LAX76AL032Accident · 3 fatalClosedPiper PA-23 · San Dimas, CANTSB FTW76FRA15Accident · Minor injuriesClosedBeech V35B · Houston, TXNTSB MKC76FCD17Accident · Serious injuriesClosedCessna 210A · Council Bluffs, IANTSB CHI76AC034Accident · 2 fatalClosedPiper PA-28 · Salem, MINTSB MIA76DLG23Accident · No injuriesClosedCessna 172 · Blair, SCNTSB FTW76FPD17Accident · Serious injuriesClosedCessna 175 · Denton, TXNTSB OAK76DVG30Accident · No injuriesClosedCessna 182 · Davis, CANTSB NYC76DFJ11Accident · Minor injuriesClosedCessna 150 · Lockport, NYNTSB DEN76AD020Accident · 2 fatalClosedChampion 7GC · Lordsburg, NMNTSB CHI76DEE27Accident · No injuriesClosedPiper PA-32 · Lansing, ILNTSB MIA76FLG21Accident · Serious injuriesClosedCessna 210L · Greer, SCNTSB IAD76FIA03Accident · Serious injuriesClosedCessna P206D · Fredericksburg, VANTSB MIA76DLG20Accident · Minor injuriesClosedPiper PA-28R · Florence, SCNTSB LAX76AL025Accident · No injuriesClosedCessna 182 · Richfield, UTNTSB LAX76AL024Accident · 1 fatalClosedBeech 95-C55 · Santa Ana, CANTSB NYC76FHA13Accident · Minor injuriesClosedBeech J35 · Basking Ridge, NJNTSB NYC76DNA18Accident · No injuriesClosedBeech B19 · Beverly, MANTSB FTW76AF032Accident · 4 fatalClosedMooney M20C · Robstown, TXNTSB CHI76FEG06Accident · Serious injuriesClosedPitts S2A · Harrison, OHNTSB CHI76FEC13Accident · Minor injuriesClosedCessna 182N · Flint, MINTSB OAK76DXQ18Accident · No injuriesClosedCessna 182 · So.Lake Tahoe, CANTSB MKC76FTK11Accident · Serious injuriesClosedSchreder HP-16 · Lennox, SDNTSB MKC76FCD15Accident · Serious injuriesClosedBeech J35 · Spencer, IANTSB MKC76AK027Accident · 2 fatalClosedMooney M20C · St Charles, MONTSB LAX76DUJ37Accident · 1 fatalClosedStinson V-77 · House Rock, AZNTSB DEN76FTE30Accident · No injuriesClosedBeech 95-B55 · Lake City, CONTSB CHI76FEP16Accident · No injuriesClosedCessna 150H · Lake Geneva, WI