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 CHI79FEE10Accident · No injuriesClosedBeech B19 · Gurnee, ILNTSB DEN79FA007Accident · 4 fatalClosedGrum-Amer AA-5B · Meeteetse, WYNTSB NYC79FGT04Accident · No injuriesClosedPiper PA-23 · Towanda, PANTSB ANC79DAG26Accident · No injuriesClosedMaule M-5 · Anchorage, AKNTSB MIA79FA013Accident · 2 fatalClosedCessa 152 · Boca Raton, FLNTSB MIA79FA012Accident · 8 fatalClosedBeech 60 · Jackson, MSNTSB LAX79FA011Accident · 1 fatalClosedCessna T210M · Hermosa Beach, CANTSB NYC79FA008Accident · 1 fatalClosedCessna 152 · West Mifflin, PANTSB MIA79FA011Accident · No injuriesClosedGrumman G21A · St Croix, VINTSB CHI79FA014Accident · 4 fatalClosedCessna 210A · Chicago, ILNTSB NYC79FGT03Accident · Minor injuriesClosedCessna 182 · New Oxford, PANTSB NYC79DNC08Accident · Minor injuriesClosedCessna 180 · Mt Katahdin, MENTSB LAX79DUJ36Accident · No injuriesClosedHiller UH12E · Yuma, AZNTSB CHI79FEV03Accident · 1 fatalClosedStarduster TOO · Nhenderson, ILNTSB CHI79FET04Accident · 2 fatalClosedMonocoupe 90A · Mentone, INNTSB NYC79FHM02Accident · No injuriesClosedCessa 182J · Tuxedo, NYNTSB MIA79FA008Accident · No injuriesClosedCessna 421B · Miami, FLNTSB LAX79DUG04Accident · No injuriesClosedCessna 182 · Apple Valley, CANTSB MIA79FLD14Accident · No injuriesClosedCessna C-182R · Avon Park, FLNTSB MIA79DLA06Accident · No injuriesClosedCessna 150J · Jacksonville, FLNTSB SEA79FA008Accident · 1 fatalClosedCessna 150H · Swan Lake, MTNTSB MIA79FA007Accident · 2 fatalClosedPiper PA-34 · Titusville, FLNTSB CHI79FEG03Accident · Minor injuriesClosedCessna 150F · Hillsboro, OHNTSB SEA79FTA03Accident · Serious injuriesClosedPiper PA-18 · Denton, MTNTSB SEA79FA010Accident · 3 fatalClosedPiper PA-20 · Joseph, ORNTSB SEA79FA007Accident · 1 fatalClosedSchweizer SGS232 · Hailey, IDNTSB OAK78DVA07Accident · No injuriesClosedCessna 172N · Huron, CANTSB NYC79FA006Accident · 1 fatalClosedPiper PA-38 · West Townshend, VTNTSB LAX79FUM01Accident · Minor injuriesClosedPiper PA-28R · Plaster City, CANTSB LAX79FA009Accident · 2 fatalClosedCessna TU206G · Chula Vista, CANTSB CHI79FEX04Accident · Minor injuriesClosedErco 415-D · Kirklin, INNTSB IAD79FIA03Accident · Serious injuriesClosedPiper PA-28R · Standardsville, VANTSB IAD79FA005Accident · 2 fatalClosedPiper PA-28 · Harpers Ferry, WVNTSB CHI79IA013Incident · No injuriesClosedBoeing 737 · Cleveland, OHNTSB LAX79FA007Accident · 2 fatalClosedCessna 182P · Whiteriver, AZNTSB MIA79DA081Accident · No injuriesClosedPiper PA-34 · Boca Raton, FLNTSB OAK79FA004Accident · 1 fatalClosedPiper PA-28 · Galt, CANTSB SEA79FTI02Accident · Serious injuriesClosedCessna T210L · Great Falls, MTNTSB DEN79FTE02Accident · Minor injuriesClosedGrumman AA-5A · Colorado Spgs, CONTSB SEA79FA006Accident · 4 fatalClosedGrum Amer AA-5B · Roche Harbor, WANTSB SEA79FA005Accident · 5 fatalClosedRolladn SCH LS-1-F · Ephrata, WANTSB MIA79FLG03Accident · Serious injuriesClosedCessna 182 · Clemson, SCNTSB OAK79FA003Accident · 1 fatalClosedCessna T-210L · San Leandro, CANTSB LAX79FA006Accident · 1 fatalClosedPiper PA32RT · Green Vly Lk, CANTSB LAX79DUJ12Accident · No injuriesClosedCessna 310I · Yuma, AZNTSB DEN79FA004Accident · 1 fatalClosedCessna 172 · Provo, UTNTSB OAK79FVD01Accident · Serious injuriesClosedHughes 500D · Garberville, CANTSB MKC78FCJ02Accident · No injuriesClosedCessna 182 · Maywood, NENTSB MIA79FLD07Accident · Serious injuriesClosedCessna 337 · Sanford, FLNTSB FTW79FQG05Accident · No injuriesClosedHiller UH-12E · Stratford, TX