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 DEN81FTE36Accident · Minor injuriesClosedPiper PA-28 · Alamosa, CONTSB LAX82FA086Accident · 1 fatalClosedCessna 152 · Ruth, CANTSB CHI81FCA07Accident · No injuriesClosedPiper PA-28 · Highland, ILNTSB SEA81FYM24Accident · No injuriesClosedMaule M4220C · North Plains, ORNTSB LAX81FUJ62Accident · Serious injuriesClosedHughes 269C · Cottonwood, AZNTSB CHI81FA055Accident · 1 fatalClosedMooney M20K · Campbell Hill, ILNTSB NYC81FA046Accident · No injuriesClosedErco 415-D · Terryville, CTNTSB DEN81FTC15Accident · No injuriesClosedCessna 152 · Gillette, WYNTSB ANC81DA051Accident · No injuriesClosedDehavilland DHC-2 · Klawock, AKNTSB LAX81FUD01Accident · No injuriesClosedBellanca 17-31 · Santa Monica, CANTSB FTW81FRG34Accident · No injuriesClosedBeech C50 · Los Fresnos, TXNTSB FTW81FA088Accident · 2 fatalClosedBeech 35 · Muse, OKNTSB FTW81FA085Accident · No injuriesClosedAerospatial AS350D · Gulf Of Mexico (Gulf of Mexico)NTSB DEN81FA030Accident · 1 fatalClosedPiper PA-32 · Gillette, WYNTSB CHI81FEV18Accident · No injuriesClosedCessna 177B · Winchester, ILNTSB ATL81FIA06Accident · No injuriesClosedHughes 269C · Washington, DCNTSB SEA81FA033Accident · Serious injuriesClosedStinson 108-2 · Ellensburg, WANTSB ATL81FLT08Accident · No injuriesClosedHughes 269C · Ridgely, TNNTSB ATL81FA070Accident · Serious injuriesClosedMooney M20K · Churchville, MDNTSB ATL81DLQ15Accident · No injuriesClosedHughes 269A-1 · Canonsburg, KYNTSB NYC81FHA10Accident · Minor injuriesClosedCessna 150G · Stroudsburg, PANTSB LAX81FUQ20Accident · 1 fatalClosedCherokee II · Valyermo, CANTSB LAX81FUG27Accident · Minor injuriesClosedCessna 172 · Hesperia, CANTSB LAX81FA081Accident · 1 fatalClosedCessna 172 · Claremont, CANTSB FTW81FRG35Accident · No injuriesClosedCessna 441 · Hebbronville, TXNTSB MIA81DLD35Accident · Minor injuriesClosedDehavilland DH-104 · Sebring, FLNTSB DEN81FA029Accident · 8 fatalClosedBell UH-1B · Williston, NDNTSB DEN81FTC14Accident · No injuriesClosedDehavilland DHC-1 · Rawlins, WYNTSB LAX81FUJ54Accident · Minor injuriesClosedCougar 1 · Willcox, AZNTSB FTW81FA082Accident · No injuriesClosedBell 206L-1 · Angleton, TXNTSB LAX81FVA37Accident · No injuriesClosedAero Comdr S2R · Firebaugh, CANTSB ATL81FKG17Accident · No injuriesClosedPiper PA-39 · Macon, GANTSB LAX81FUG42Accident · Serious injuriesClosedRaven RX-7 · San Dimas, CANTSB LAX81FA079Accident · 1 fatalClosedPiper PA-32 · Tehachapi, CANTSB FTW81DRG32Accident · Minor injuriesClosedTaylor Titc MK-1 · Menard, TXNTSB FTW81DPG19Accident · No injuriesClosedCessna 172 · Bay, ARNTSB DEN81FTM20Accident · Minor injuriesClosedHughes 369D · Morgan, SDNTSB FTW81FPD19Accident · Minor injuriesClosedChampion 402 · Roanoke, TXNTSB FTW81FA079Accident · 1 fatalClosedCessna TU206B · Beaumont, TXNTSB DEN81DTG08Accident · No injuriesClosedCessna A185F · Williston, NDNTSB CHI81FEK15Accident · Serious injuriesClosedRichards Variez · Wapakoneta, OHNTSB MKC81FCD17Accident · No injuriesClosedMooney M20J · Norwalk, IANTSB DEN82DTE29Accident · No injuriesClosedCessna 172N · Wray, CONTSB ATL81FKG16Accident · No injuriesClosedCessna 172P · Carnesville, GANTSB SEA81FA031Accident · 2 fatalClosedPiper PA-28 · Washougal, WANTSB LAX81FJA08Accident · Minor injuriesClosedCessna 206G · 400mi Ne Hnl, HINTSB FTW81IA076Incident · No injuriesClosedBell 206B · Gulf Of Mexico (Gulf of Mexico)NTSB SEA81AA030Accident · 1 fatalClosedCessna 172N · Gorst, WANTSB LAX81FUA07Accident · Minor injuriesClosedBellanca 8KCAB · San Pedro, CANTSB MKC81IA031Incident · No injuriesClosedPiper PA-32 · St.Ansgar, IA