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 SEA79FA016Accident · 1 fatalClosedPiper PA-14 · Eugene, ORNTSB OAK79DVG06Accident · No injuriesClosedCessna 150 · Winters, CANTSB MIA79FLG17Accident · No injuriesClosedHiller FH1100 · West Columbia, SCNTSB MIA79DKA02Accident · No injuriesClosedCessna 206 · Vieques, PRNTSB FTW79FRD10Accident · No injuriesClosedPiper PA-28 · Baton Rouge, LANTSB FTW79FA020Accident · 1 fatalClosedBell 206B · Port Oconner, TXNTSB MKC79DTK02Accident · No injuriesClosedCessna 150 · Sorum, SDNTSB MIA79FLG05Accident · No injuriesClosedPiper PA-12 · N.Myrtle Bch, SCNTSB MIA79FA022Accident · 2 fatalClosedPiper PA32RT · Charleston, SCNTSB FTW79DA018Accident · 1 fatalClosedBolkow B-105 · Morgan City, LANTSB DEN79FA010Accident · 2 fatalClosedPiper PA-28R · Cimarron, NMNTSB UNK79X0104Accident · 1 fatalClosedMooney M20E · Gt Hbr Cay, Burkina FasoNTSB FTW79FRA04Accident · Serious injuriesClosedPiper PA-22 · Houston, TXNTSB ANC79DAD01Accident · Minor injuriesClosedStinson 108 · Angoon, AKNTSB FTW79DQG09Accident · No injuriesClosedCessna 150 · Midland, TXNTSB DEN79FA009Accident · 2 fatalClosedPiper PA-38 · Las Cruses, NMNTSB ANC79FA020Accident · 5 fatalClosedDehavilland DHC-2 · Hydaburg, AKNTSB MKC79DTK01Accident · Minor injuriesClosedCessna 150 · Piedmont, SDNTSB NYC79FA012Accident · 3 fatalClosedCessna 172F · Mcadoo, PANTSB IAD79FA020Accident · 3 fatalClosedPiper PA-24 · Marlinton, WVNTSB MIA79FA018Accident · 1 fatalClosedPiper PA-28 · Osteen, FLNTSB MIA79DKJ13Accident · No injuriesClosedCessna 140 · Careyville, FLNTSB IAD79FA019Accident · 3 fatalClosedBeech G35 · Bridgewater, VANTSB FTW79FA016Accident · 3 fatalClosedBeech 58 · George West, TXNTSB IAD79FA016Accident · 1 fatalClosedCessna 175B · Rileyville, VANTSB IAD79FA015Accident · 1 fatalClosedCessna 172 · Mt Airy, NCNTSB FTW79FQD01Accident · No injuriesClosedCessna 177B · Van Horn, TXNTSB CHI79FEI07Accident · Minor injuriesClosedPiper PA-32 · North Canton, OHNTSB ANC79FA022Accident · 1 fatalClosedPiper PA-32 · Old Harbor, AKNTSB FTW78FPA05Accident · No injuriesClosedBeech 35 · Rockwall, TXNTSB DEN79DTM02Accident · Minor injuriesClosedCessna 150 · Price, UTNTSB UNK79X0102Accident · No injuriesClosedMartin 404 · Gulf Of Venezuela, VenezuelaNTSB OAK79FXQ03Accident · No injuriesClosedPiper PA-31 · Reno, NVNTSB IAD79FA014Accident · No injuriesClosedPiper PA-32 · South Boston, VANTSB IAD79FA013Accident · 1 fatalClosedCessna 152 · Spencer, WVNTSB NYC79FGT05Accident · No injuriesClosedPiper 601P · Lock Haven, PANTSB ANC79DAG25Accident · No injuriesClosedBeech 36 · Anchorage, AKNTSB CHI79FEP07Accident · Minor injuriesClosedCessna P210N · Green Bay, WINTSB SEA79FYK03Accident · Serious injuriesClosedCessna 210 · Triangle Lake, ORNTSB LAX79FA013Accident · 1 fatalClosedCessna 172N · Sn Jun Cpstrn, CANTSB FTW79DRA03Accident · No injuriesClosedCessna 421B · Wichita Falls, TXNTSB LAX79FUG05Accident · Serious injuriesClosedAero Comdr 680W · Lucerne, CANTSB CHI79FEM04Accident · No injuriesClosedMooney M20J · Marshall, MINTSB NYC79FA011Accident · 6 fatalClosedPiper PA-32 · Newry, MENTSB MKC79FCG12Accident · No injuriesClosedCessna U206F · Springfield, MONTSB LAX79FUJ13Accident · 1 fatalClosedBell 47G3B · Springerville, AZNTSB LAX79FUG06Accident · Serious injuriesClosedCessna 172N · Fontana, CANTSB FTW79DRG08Accident · No injuriesClosedCessna 182 · Skidmore, TXNTSB CHI79FA017Accident · 2 fatalClosedGrumman AA-5 · Norway, MINTSB ANC79FA018Accident · No injuriesClosedBeech 36 · Unalakleet, AK