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 IAD79FID14Accident · No injuriesClosedBellanca 17-30 · Quinton, VANTSB SEA79DYE21Accident · No injuriesClosedCessna 150 · Curtiss, WANTSB MIA79FLD60Accident · Minor injuriesClosedPiper J-3C · Arcadia, FLNTSB LAX79DUJ67Accident · No injuriesClosedAeronca 7AC · Tucson, AZNTSB SEA79FYM30Accident · Serious injuriesClosedPiper PA-28 · Sandy, ORNTSB MIA79FLG22Accident · Minor injuriesClosedPiper PA-28 · Ridgeland, SCNTSB MIA79FKT62Accident · Serious injuriesClosedBellanca 7GCBC · Miami, FLNTSB FTW7DDA077Accident · Minor injuriesClosedBell 206L · Cameron, LANTSB MIA79DA079Accident · 2 fatalClosedLockheed PV-1 · Guamtanamo (Atlantic Ocean)NTSB FTW79FPJ13Accident · No injuriesClosedCessna 172 · Minco, OKNTSB CHI79FEE51Accident · Minor injuriesClosedBeech 65-A90 · Chicago, ILNTSB LAX79FA047Accident · 2 fatalClosedCessna 172M · Gorman, CANTSB IAD79FA047Accident · 2 fatalClosedCessna 182J · Hillsboro, VANTSB FTW79FA070Accident · Serious injuriesClosedAerospatile SA365C · Sabine Pass, TXNTSB FTW79DQG36Accident · No injuriesClosedCessna 188 · Higgins, TXNTSB OAK79FA027Accident · Minor injuriesClosedPiper PA-22 · King City, CANTSB FTW79FRD24Accident · Minor injuriesClosedCessna 180J · Harvey, LANTSB CHI79FEI20Accident · No injuriesClosedCessna 170A · Newton Falls, OHNTSB CHI79FEE53Accident · No injuriesClosedPiper PA-28 · Cherry, ILNTSB LAX79DUM13Accident · No injuriesClosedBell 47G-2A · Fallbrook, CANTSB MIA79DLG21Accident · No injuriesClosedCessna 152 · Williamton, SCNTSB FTW79DRG30Accident · No injuriesClosedPiper PA-32R · Sarita, TXNTSB LAX79FUJ64Accident · No injuriesClosedCessna 150 · Willcox, AZNTSB NYC79DA043Accident · Serious injuriesClosedBoeing 707 · Panama City, St. Pierre & MiquelonNTSB SEA79DTI13Accident · Serious injuriesClosedPiper PA-24 · Sula, MTNTSB MKC79FCD16Accident · Minor injuriesClosedMooney M20E · Cresco, IANTSB LAX79DVA29Accident · Minor injuriesClosedPiper PA-28 · Avenal, CANTSB FTW79FA073Accident · No injuriesClosedLockheed 18 · Brownsville, TXNTSB DEN79DTC11Accident · No injuriesClosedPiper PA-18A · Casper, WYNTSB SEA79FA031Accident · 2 fatalClosedBell 214B-1 · Darby, MTNTSB ANC79DA046Incident · No injuriesClosedCessna 180F · Sheep Bay, AKNTSB NYC79FFA17Accident · No injuriesClosedGrum Amer AA-1C · Oriskany, NYNTSB NYC79FA039Accident · 2 fatalClosedCessna 152 · Stormville, NYNTSB MIA79FA073Accident · 1 fatalClosedPiper PA-30 · Rich, MSNTSB DCA79FA014Accident · 3 fatalClosedSikorsky S61-L · Newark, NJNTSB CHI79FA045Accident · 2 fatalClosedPiper PA-28 · Veedersburg, INNTSB MIA79FKT61Accident · No injuriesClosedConvair 340 · Key West, FLNTSB FTW79DPA14Accident · No injuriesClosedCessna 177 · Blue Ridge, TXNTSB MIA79FA071Accident · 2 fatalClosedBeech 58 · Boca Ration, FLNTSB LAX79FA044Accident · 3 fatalClosedCessna 170B · Big Bear City, CANTSB IAD79DLJ09Accident · Minor injuriesClosedCessna 150 · Roseboro, NCNTSB OAK79DVA26Accident · No injuriesClosedRyan ST3KR · Fresno, CANTSB LAX79DVA25Accident · No injuriesClosedBeech H35 · Porterville, CANTSB LAX79DUG30Accident · 1 fatalClosedBarnett J-4 · Adelanto, CANTSB FTW79FQG30Accident · No injuriesClosedNavion A · Sweetwater, TXNTSB CHI79FEP43Accident · No injuriesClosedPiper PA-32R · Iola, WINTSB CHI79FA044Accident · 3 fatalClosedCessna 150J · Waverly, OHNTSB DEN79FA036Accident · 3 fatalClosedPiper PA-32 · Carrizozo, NMNTSB IAD79IA044Incident · No injuriesClosedFairchild PC-6C · Raeford, NCNTSB IAD79FIG05Accident · No injuriesClosedLake LA4200 · Dayton, MD