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 ANC79FA068Accident · 7 fatalClosedCessna 402B · Anchorage, AKNTSB SEA79FYM48Accident · No injuriesClosedGrumman G-164A · Hermiston, ORNTSB CHI79FEG18Accident · Serious injuriesClosedBeech E-18S · Dayton, OHNTSB SEA79FA044Accident · Serious injuriesClosedCessna 182G · Challis, IDNTSB NYC79FNC36Accident · No injuriesClosedWaco UPF-7 · North Conway, NHNTSB CHI79FEX32Accident · Minor injuriesClosedCessna 172 · Terra Haute, INNTSB NYC79FNC35Accident · No injuriesClosedErco 415-C · Turner, MENTSB MIA79FKG53Accident · No injuriesClosedPiper PA-23 · Sapelo Island, GANTSB FTW79FPG63Accident · Serious injuriesClosedAero Cmdr 600S-2 · Crawfordsville, ARNTSB SEA79FYP34Accident · No injuriesClosedPiper PA-28 · Othello, WANTSB NYC79FGM32Accident · Minor injuriesClosedLuscombe 8A · Albion, PANTSB LAX79FA059Accident · 4 fatalClosedFairchild C119L · Casa Grande, AZNTSB IAD80FA009Accident · 2 fatalClosedCessna T210 · Highlands, NCNTSB IAD79FIA14Accident · No injuriesClosedGrum Amer AA-5 · Warrenton, VANTSB FTW79FQG47Accident · No injuriesClosedPiper PA-25 · Spur, TXNTSB FTW79DPG61Accident · No injuriesClosedCessna 172 · El Dorado, ARNTSB CHI79FEM27Accident · Serious injuriesClosedAeronca 7AC · Spring Lake, MINTSB MIA79FKQ14Accident · 1 fatalClosedCessna A188B · Lyman, MSNTSB MIA79DA114Accident · No injuriesClosedLockheed PV-1 · Aruba (Atlantic Ocean)NTSB LAX79DUG49Accident · No injuriesClosedBeech K-35 · Barstow, CANTSB CHI79FEM25Accident · Minor injuriesClosedBellanca 7GCAA · West Branch, MINTSB ANC79FA067Accident · 3 fatalClosedRallye 235GT · Kodiak, AKNTSB SEA79FA043Accident · 2 fatalClosedAero Comdr 114 · Leavenworth, WANTSB OAK79FVM29Accident · No injuriesClosedCessna 152 · San Jose, CANTSB MIA79FKJ53Accident · No injuriesClosedCessna 421B · Montgomery, ALNTSB LAX79FUM20Accident · Serious injuriesClosedBell 47G-5 · Escondido, CANTSB IAD79DIJ09Accident · No injuriesClosedBell 206 · Gary, WVNTSB DEN79FQA37Accident · No injuriesClosedBell 47G · Socorro, NMNTSB CHI79FEP53Accident · No injuriesClosedCessna 150 · Milwaukee, WINTSB NYC79FNA19Accident · No injuriesClosedCiciora T-18 · West Tisbury, MANTSB FTW79FPG60Accident · Minor injuriesClosedCessna 172M · Newport, ARNTSB SEA79DYP32Accident · Serious injuriesClosedGrumman G-164A · Lewiston, IDNTSB FTW79FA092Accident · 7 fatalClosedCessna 340 · Ashdown, ARNTSB CHI79FEP51Accident · Serious injuriesClosedCessna 182P · Neillsville, WINTSB CHI79FA056Accident · 1 fatalClosedPiper PA-28 · Taylor, WINTSB ANC79FA065Accident · No injuriesClosedEnstrom F-28C · Portage, AKNTSB OAK79DVA47Accident · No injuriesClosedBeech C23 · Chinese Camp, CANTSB MIA79DKT73Accident · Minor injuriesClosedBeech A60 · Belle Glade, FLNTSB LAX79FUM18Accident · No injuriesClosedCessna 210J · Carlsbad, CANTSB DEN79FTC19Accident · No injuriesClosedHughes 369D · Labarge, WYNTSB OAK79FVD34Accident · No injuriesClosedCessna 172K · Livermore, CANTSB ANC79FA064Accident · Minor injuriesClosedCessna U206F · Kotlik, AKNTSB SEA79FYP31Accident · No injuriesClosedHiller Acft UH-12E · Quincy, WANTSB NYC79DNC41Accident · No injuriesClosedCessna 140A · Johnson, VTNTSB MKC79FCQ34Accident · Minor injuriesClosedInterceptor Super · Johnson, KSNTSB MKC79FCG52Accident · No injuriesClosedGrumman AA1B · Garnett, KSNTSB FTW79FA090Accident · 2 fatalClosedLuscombe 8A · Winnsboro, LANTSB DEN79DQD13Accident · No injuriesClosedPiper PA-28 · Whites City, NMNTSB ANC79DAG57Accident · No injuriesClosedBellanca 7GCBC · Anchorage, AKNTSB MIA79FKA07Accident · No injuriesClosedCessna 172 · St.Croix, VI