NTSB investigations
35,889 cases where the phase of flight was Enroute.
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 = 400)
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 = 400)
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 CHI79FEK20Accident · No injuriesClosedCessna 150L · Columbus, OHNTSB ANC79DAG88Accident · No injuriesClosedCessna 185 · Mcgrath, AKNTSB FTW79FPD34Accident · Serious injuriesClosedCessna 177 · Cleburne, TXNTSB MKC79FCG71Accident · No injuriesClosedBeech A23-24 · Reading, KSNTSB MKC79DCJ36Accident · No injuriesClosedCessna P206A · Kearney, NENTSB CHI79FEI39Accident · Minor injuriesClosedPiper PA-32 · Port Clinton, OHNTSB MIA79FKA11Accident · Serious injuriesClosedBeech B24R · Arecibo, PRNTSB IAD79IA066Incident · No injuriesClosedBeech 65-80 · Washington, DCNTSB IAD79FIG14Accident · No injuriesClosedErco 415-D · Crofton Mews, MDNTSB FTW79FPA24Accident · No injuriesClosedCessna 152 · Dallas, TXNTSB MKC79FCG67Accident · Minor injuriesClosedBeech 35 · Stilwell, KSNTSB IAD79FID24Accident · Serious injuriesClosedCessna 421 · Norfolk, VANTSB CHI79FEM33Accident · 2 fatalClosedBreezy FGC100 · Grand Haven, MINTSB CHI79FEI37Accident · No injuriesClosedPiper PA-22 · Kirby, OHNTSB SEA79FA049Accident · 6 fatalClosedCessna T210M · Pistol Creek, IDNTSB IAD79DLT06Accident · No injuriesClosedPiper PA-24 · Mckenzie, TNNTSB SEA79FYE38Accident · Serious injuriesClosedCessna 172N · Port Angeles, WANTSB MKC79FA046Accident · 7 fatalClosedMitsubishi MU-2B · Hays, KSNTSB LAX79FA064Accident · Minor injuriesClosedBell 206B · Grand Canyon, AZNTSB FTW79DPG71Accident · No injuriesClosedPiper PA-20 · Red Star, ARNTSB CHI79FEV29Accident · No injuriesClosedPiper PA-23 · Champaign, ILNTSB MIA79FA110Accident · 4 fatalClosedGrum Amer AA-5A · Orlando, FLNTSB SEA79FYA22Accident · 1 fatalClosedCallair A-9 · Mt.Home, IDNTSB MIA79DLA42Accident · No injuriesClosedSnow S-2R · Camilla, GANTSB CHI79FEM32Accident · No injuriesClosedCessna 150E · Dafter, MINTSB ANC79DAG75Accident · No injuriesClosedHiller UH-12B · Dutch Harbor, AKNTSB IAD79FIG11Accident · Minor injuriesClosedPiper J5A · Taneytown, MDNTSB DEN79FQA44Accident · Minor injuriesClosedCessna 337 · Prewitt, NMNTSB NYC79FHA19Accident · No injuriesClosedCessna 177 · Franklin, NJNTSB NYC79FGM38Accident · Serious injuriesClosedPiper PA-28 · Greensburg, PANTSB MIA79DKT81Accident · No injuriesClosedCessna 150H · Miami, FLNTSB CHI79FEP69Accident · No injuriesClosedCessna 177 · Oshkosh, WINTSB CHI79FEP63Accident · No injuriesClosedCessna 182 · Green Bay, WINTSB ANC79DAG80Accident · No injuriesClosedBellanca 7GCBC · Seward, AKNTSB CHI79FEG22Accident · Serious injuriesClosedBeech B23 · Waynesville, OHNTSB CHI79FA063Accident · 1 fatalClosedPiper PA-32 · Spring Green, WINTSB SEA79DYM55Accident · Minor injuriesClosedHiller Acft UH-12E · Warm Spgs Res, ORNTSB NYC79FA067Accident · 1 fatalClosedLuscombe 8A · Clarion, PANTSB NYC79DNC40Accident · Minor injuriesClosedDehavilland DH82A · Pittsfield, MENTSB NYC79DFA28Accident · No injuriesClosedCessna 185 · Durham, NYNTSB MKC79FCQ38Accident · No injuriesClosedCessna 150H · Columbus, KSNTSB LAX79DVA52Accident · No injuriesClosedBellanca 7ECA · Kernville, CANTSB LAX79DUJ97Accident · Serious injuriesClosedCessna 172 · Tortilla Flats, AZNTSB MKC79FCQ39Accident · No injuriesClosedDyke Delta JD-2 · Tribune, KSNTSB CHI79FET26Accident · Serious injuriesClosedN American SNJ-5 · Elkhart, INNTSB CHI79FEP66Accident · Serious injuriesClosedCessna 172M · Rockwood, WINTSB MKC79DA045Accident · Serious injuriesClosedConvair 580 · Joplin, MONTSB MIA79FKJ58Accident · Serious injuriesClosedHeadwind J.D. · Brewton, ALNTSB SEA80FYM54Accident · Minor injuriesClosedHughes 369D · Bay City, ORNTSB SEA79DYM53Accident · No injuriesClosedCessna 150 · Pilot Rock, OR