NTSB investigations
20,996 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 OAK71FVM50Accident · No injuriesClosedHughes 269A · San Jose, CANTSB CHI71FGG32Accident · No injuriesClosedLuscombe 8F · Findlay, OHNTSB SEA71AS040Accident · 4 fatalClosedLear Jet 24D · Butte, MTNTSB OAK71AP040Accident · 2 fatalClosedCessna 172 · Sacramento, CANTSB MIA71AM088Accident · 4 fatalClosedMooney M20C · Athens, GANTSB NYC71FGM41Accident · Minor injuriesClosedCessna 182A · Johnstown, PANTSB FTW71FRD38Accident · Serious injuriesClosedBeech V35 · Wilson, LANTSB FTW71FPG48Accident · No injuriesClosedCessna 172 · Tukerman, ARNTSB ANC71DAA29Accident · Minor injuriesClosedPiper PA-18A · Barrow, AKNTSB FTW71AF071Accident · 4 fatalClosedCessna 210H · Iraan, TXNTSB DEN71FQA53Accident · No injuriesClosedGlobe GC-1B · Albuquerque, NMNTSB NYC71FHM25Accident · Serious injuriesClosedCessna 172 · Montgomery, NYNTSB CHI71AC076Accident · 1 fatalClosedCessna 150 · Knox, INNTSB NYC71FHA43Accident · No injuriesClosedPiper PA-28 · Easton, PANTSB MIA71DKG73Accident · No injuriesClosedCessna 182 · Fort Valley, GANTSB FTW71AF070Accident · No injuriesClosedGates Lear 25 · Lake Charles, LANTSB NYC71FGT14Accident · No injuriesClosedPiper PA-28 · Towanda, PANTSB MIA71FKJ45Accident · No injuriesClosedPiper PA-28 · Grady, ALNTSB LAX71FVQ74Accident · Minor injuriesClosedBell 47J2 · Sta Barbara, CANTSB IAD71FLJ19Accident · No injuriesClosedCessna 172 · Williamston, NCNTSB CHI71FBQ35Accident · No injuriesClosedLear Jet 23 · Danville, ILNTSB CHI71FBM21Accident · Serious injuriesClosedHughes 269B · Griffith, INNTSB CHI71FBJ67Accident · No injuriesClosedPiper PA-28 · Riverdale, MINTSB FTW71DRH10Accident · Serious injuriesClosedCessna 310 · Guadalupe, MexicoNTSB MIA71RKA11Accident · Serious injuriesClosedDouglas DC-3A · East End, U.S. Virgin IslandsNTSB CHI71AC072Accident · Serious injuriesClosedPiper PA-32 · Hinsdale, ILNTSB LAX71DUG87Accident · No injuriesClosedSchweizer TG-3A · Adelanto, CANTSB CHI71DEE68Accident · No injuriesClosedChampion 7FC · Joliet, ILNTSB LAX71DUG67Accident · No injuriesClosedPiper PA-28 · Rialto, CANTSB FTW71AF068Accident · No injuriesClosedCessna 150 · Dallas, TXNTSB DEN71DTE63Accident · Minor injuriesClosedPiper PA-30 · Grand Jnctn, CONTSB SEA71FVQ21Accident · Serious injuriesClosedCessna 150H · Cotage Grove, ORNTSB DCA71AZ009Accident · 5 fatalClosedBoeing 720 · Ontario, CANTSB NYC71FHM23Accident · Serious injuriesClosedPiper PA-24 · Moonachie, NJNTSB OAK71FVG61Accident · Minor injuriesClosedCessna 182 · Alturas, CANTSB OAK71DVD37Accident · No injuriesClosedCessna 150H · Hayward, CANTSB LAX71FUG65Accident · Serious injuriesClosedCessna 172 · El Monte, CANTSB MIA71FKW41Accident · No injuriesClosedCessna 172 · Oliver Sprgs, TNNTSB FTW71FRD36Accident · Minor injuriesClosedCessna 170A · Welsh, LANTSB MIA71FKT49Accident · Serious injuriesClosedBeech K35 · Key Largo, FLNTSB FTW71FQG68Accident · No injuriesClosedN.American Navion · Lubbock, TXNTSB OAK71DVD35Accident · No injuriesClosedBeech A23-19 · Oakland, CANTSB CHI71FGG29Accident · No injuriesClosedPiper PA-28 · Columbus, OHNTSB LAX71FUG60Accident · No injuriesClosedCessna 337 · Chino, CANTSB FTW71FRJ31Accident · No injuriesClosedCessna 150L · Dialville, TXNTSB NYC71IN093Incident · No injuriesClosedBeech 99 · New York, NYNTSB FTW72DRG55Accident · Serious injuriesClosedThorp T-18 · Rosarito Bch, MexicoNTSB FTW71FRJ30Accident · Minor injuriesClosedAmer Avco AA1 · Pineville, LANTSB OAK71FVG56Accident · Serious injuriesClosedCessna 150B · Lincoln, CANTSB MIA71DLG23Accident · No injuriesClosedPiper J-5A · Georgetown, SC