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 FTW80FPD01Accident · No injuriesClosedBeech 58P · Nocona, TXNTSB DEN80DTE01Accident · No injuriesClosedCessna T182RG · Wolcott, CONTSB MKC80FTK04Accident · No injuriesClosedCessna 210 · Dixon, SDNTSB FTW80FRD08Accident · No injuriesClosedHughes 369D · Abbeville, LANTSB CHI80FEV03Accident · No injuriesClosedAeronca 7AC · Brookport, ILNTSB DEN80FQA03Accident · No injuriesClosedHughes 500C · Albuquerque, NMNTSB DEN80FA002Accident · 2 fatalClosedRaven S55AX7 · Albuquerque, NMNTSB ANC80FA003Accident · 2 fatalClosedPiper J-3 · Georgetown, AKNTSB NYC80FA005Accident · 1 fatalClosedPiper PA-31 · Uniontown, PANTSB FTW80FRD07Accident · No injuriesClosedBell 206L · Lake Charles, LANTSB FTW80FPA01Accident · No injuriesClosedHughes 369D · Dallas, TXNTSB DEN80FQA02Accident · Minor injuriesClosedPiper PA-28R · Torreon, NMNTSB SEA80FA002Accident · 2 fatalClosedAerospatial SA315B · Swan Valley, IDNTSB DEN80DTM03Accident · Serious injuriesClosedCessna 172 · Ogden, UTNTSB CHI80DEP01Accident · No injuriesClosedBeech 19 · Big Bend, WINTSB MKC80DCD01Accident · No injuriesClosedCessna 150 · New Hampton, IANTSB MIA80FKG01Accident · No injuriesClosedCessna 150 · Jonesboro, GANTSB LAX80FA001Accident · 2 fatalClosedCessna 170B · Schurz, NVNTSB IAD80FKM01Accident · Serious injuriesClosedPiper PA-22 · Charlotte, NCNTSB NYC80FGM02Accident · No injuriesClosedCessna 152 · Butler, PANTSB NYC80FA004Accident · 1 fatalClosedBell 206B · Old Westbury, NYNTSB NYC80DNC01Accident · No injuriesClosedN. American AT-6 · Belfast, MENTSB FTW80FQG01Accident · Serious injuriesClosedBellanca 7KCAB · Big Spring, TXNTSB IAD80FA004Accident · 2 fatalClosedCessna T210N · Lawrenceville, VANTSB FTW80FA004Accident · Serious injuriesClosedHughes 369D · Houston, TXNTSB DEN80FTC01Accident · No injuriesClosedCessna TU206F · Lander, WYNTSB NYC80FGM01Accident · Minor injuriesClosedPiper PA-28 · Connellsville, PANTSB IAD80FA003Accident · 3 fatalClosedHughes 369HS · Mt Crawford, VANTSB FTW80FRJ01Accident · Minor injuriesClosedAero Comdr 680W · Alexandria, LANTSB DEN80FTM02Accident · Minor injuriesClosedCessna P210 · Fillmore, UTNTSB UNK80X0100Accident · 2 fatalClosedCessna 152 · Gainesville, TXNTSB LAX80DUJ04Accident · No injuriesClosedCessna 152 · Springerville, AZNTSB IAD80FLQ02Accident · No injuriesClosedCessna 150L · Winchester, KYNTSB FTW80IA002Incident · Serious injuriesClosedBoeing 727 · Ft.Worth, TXNTSB FTW80DRD04Accident · No injuriesClosedCessna 152 · Kentwood, LANTSB CHI80FA001Accident · 1 fatalClosedBellanca 17-31 · North Manchest, INNTSB CHI80DA003Accident · 1 fatalClosedCessna 152 · Syracuse, INNTSB ANC80DAG04Accident · No injuriesClosedPilatus PC-6 · Sparrevohn, AKNTSB NYC8OFA001Accident · 1 fatalClosedPiper PA-23 · Ashford, CTNTSB MIA79FA132Accident · 1 fatalClosedCessna 404 · Ft.Lauderdale, FLNTSB LAX79IA092Incident · 1 fatalClosedBoeing 747 · Pacific Ocean (Pacific Ocean)NTSB LAX79FUM27Accident · Serious injuriesClosedCessna 150 · Ramona, CANTSB CHI79FEE85Accident · No injuriesClosedBeech F35 · Utica, ILNTSB LAX79FVM33Accident · No injuriesClosedPiper PA-28 · Redwood City, CANTSB CHI79FEE86Accident · 1 fatalClosedVolksplane VP-1 · Plainfield, ILNTSB FTW79FPM17Accident · No injuriesClosedErco 415-C · Atoka, OKNTSB CHI79FEM40Accident · Minor injuriesClosedCessna 182F · Gladwin, MINTSB CHI79FEC58Accident · No injuriesClosedCessna 182K · Sandusky, MINTSB CHI79FA083Accident · 4 fatalClosedGrum Amer AA-5A · Urbana, OHNTSB CHI79AA082Accident · 5 fatalClosedPiper PA-32R · Indianapolis, IN