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 FTW79DQG58Accident · No injuriesClosedPiper PA-24 · Wall, TXNTSB SEA79FA052Accident · 5 fatalClosedPiper PA-32 · Maple Falls, WANTSB MIA79FA118Accident · 2 fatalClosedPiper PA-24 · Melbourne, FLNTSB LAX79DUG54Accident · No injuriesClosedPiper PA-38 · 29 Palms, CANTSB CHI79DEG24Accident · No injuriesClosedCessna 152 · Camden, OHNTSB LAX79FA070Accident · 2 fatalClosedCessna 152 · San Marcos, CANTSB LAX79DVG73Accident · Minor injuriesClosedPiper PA-28R · Redding, CANTSB FTW79FPA27Accident · No injuriesClosedCessna 150F · Rowlett, TXNTSB SEA79FYK24Accident · No injuriesClosedCessna A185F · Eugene, ORNTSB IAD79FIJ13Accident · Minor injuriesClosedCessna 175 · Parkersburg, WVNTSB FTW79FQG57Accident · Minor injuriesClosedDavis DA-5A · Midland, TXNTSB SEA79FA050Accident · 4 fatalClosedBeech B23 · Neihart, MTNTSB NYC79FFJ26Accident · No injuriesClosedPiper PA-24 · Wellsville, NYNTSB LAX79DUK18Accident · Minor injuriesClosedCessna 150 · Page, AZNTSB FTW79FRG52Accident · No injuriesClosedBell 47G-4A · Alice, TXNTSB FTW79FQG56Accident · Minor injuriesClosedGrumman G-164A · Hale Center, TXNTSB FTW78DQG55Accident · Minor injuriesClosedCessna 188 · Adrian, TXNTSB NYC79FA082Accident · 3 fatalClosedAero Comdr 680FL · Rexville, NYNTSB LAX79DUK17Accident · No injuriesClosedPiper PA-28 · Shonto, AZNTSB ANC79FA085Accident · 2 fatalClosedPiper PA-11 · Dillingham, AKNTSB ANC79FA083Accident · 2 fatalClosedPiper PA-14 · Anchorage, AKNTSB ANC79DAA31Accident · No injuriesClosedPiper PA-12 · Ft.Yukon, AKNTSB NYC79FFS25Accident · Serious injuriesClosedBushby 22 · Geneseo, NYNTSB MIA79FKA12Accident · Minor injuriesClosedPiper PA-38 · Camuy, PRNTSB DEN99FA057Accident · 4 fatalClosedPiper PA-28 · Fairview, UTNTSB MIA79FKJ62Accident · Minor injuriesClosedPiper PA-25 · Autaugaville, ALNTSB LAX79FUM25Accident · 1 fatalClosedN.American P-51D · Nsalton City, CANTSB FTW79DPJ36Accident · No injuriesClosedPiper PA-22 · Pauls Valley, OKNTSB NYC79FHA22Accident · No injuriesClosedCessna 310I · Reddington, NJNTSB IAD79FA069Accident · 2 fatalClosedCessna 310K · Cresaptown, MDNTSB NYC79FA081Accident · 1 fatalClosedCessna 152 · Kunkletown, PANTSB MKC79FCD33Accident · Serious injuriesClosedCessna 210 · Fostoria, IANTSB MKC79FA050Accident · 1 fatalClosedCessna 150 · St Anthony, NDNTSB LAX79DDD36Accident · No injuriesClosedAeronca L-3 · Walnut Creek, CANTSB IAD79FLJ14Accident · No injuriesClosedCessna A188 · Merritt, NCNTSB IAD79FA067Accident · 1 fatalClosedBenson R8M · Fayetteville, TNNTSB SEA79FYM58Accident · No injuriesClosedPiper PA-18 · Heppner, ORNTSB NYC79FGM44Accident · Serious injuriesClosedEnstrom F28C · Erie, PANTSB NYC79FA079Accident · 1 fatalClosedCessna 172M · Mount Union, PANTSB CHI79FEP75Accident · 2 fatalClosedPiper PA-28 · Kenosha, WINTSB DEN79FA055Accident · 2 fatalClosedBell 47G3B1 · Rico, CONTSB SEA79FYM57Accident · Serious injuriesClosedAero Comdr S-2R · Hermiston, ORNTSB SEA79FYE43Accident · 1 fatalClosedZipper HH-1 · Everett, WANTSB NYC79DA077Accident · No injuriesClosedPiper PA-18 · Chatam, MANTSB LAX79FA067Accident · 2 fatalClosedMaule M-5 · Mammoth Lakes, CANTSB IAD79DID25Accident · Minor injuriesClosedPiper PA-28 · Roanoke, VANTSB FTW79FPD35Accident · No injuriesClosedPiper PA-22 · Abilene, TXNTSB NYC79FA076Accident · No injuriesClosedRichard KR-2 · Asbury Park, NJNTSB NYC79IA075Incident · No injuriesClosedLear Jet 35 · Newark, NJNTSB DEN79FQD15Accident · Minor injuriesClosedCessna 172 · Cloudcroft, NM