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 MIA79FKG43Accident · No injuriesClosedPiper PA-28 · Thomaston, GANTSB IAD79FKW10Accident · Minor injuriesClosedTaylorcraft F-19 · Elk Valley, TNNTSB FTW79FQG40Accident · No injuriesClosedCessna 150M · Dalhart, TXNTSB SEA79FA036Accident · Serious injuriesClosedCessna 172K · St Maries, IDNTSB OAK79FJA12Accident · No injuriesClosedHiller Acft UH-12E · Lihue, HINTSB MKC79FA030Accident · 2 fatalClosedCessna 172M · Grand Marais, MNNTSB ANC79FAA13Accident · No injuriesClosedPiper PA-22 · Nenana, AKNTSB ANC79DA052Accident · 2 fatalClosedPiper PA-22 · Cape Seniavin, AKNTSB DEN79FTC14Accident · Minor injuriesClosedCessna 172E · Rawlins, WYNTSB LAX79FUQ30Accident · No injuriesClosedCessna 172 · Santa Barbara, CANTSB NYC79FA046Accident · 4 fatalClosedCessna 182 · Massapequa, NYNTSB MKC79FA029Accident · 1 fatalClosedPiper PA-18 · Oelrichs, SDNTSB ANC79DAG55Accident · No injuriesClosedCessna 206 · Kustatan, AKNTSB LAX79FVW14Accident · Minor injuriesClosedStinson 108-2 · Glendale, NVNTSB DEN79FTM14Accident · Minor injuriesClosedPiper PA-22 · Panguitch, UTNTSB FTW79DA080Accident · No injuriesClosedBell 206B · Sorrento, LANTSB CHI79FEX25Accident · No injuriesClosedBell 47J2 · Westfield, INNTSB IAD79FLQ11Accident · No injuriesClosedEnstrom F-28-C · Shelbyville, KYNTSB NYC79FGM23Accident · Serious injuriesClosedPiper PA-32 · Bradford, PANTSB OAK79FVD27Accident · No injuriesClosedN.American SNJ-6 · Antioch, CANTSB DEN79FTM17Accident · Serious injuriesClosedMooney M20E · Hanksville, UTNTSB DEN79FQD08Accident · Minor injuriesClosedCessna 182 · Deming, NMNTSB DEN79FA039Accident · 2 fatalClosedPiper PA-31 · Albuquerque, NMNTSB SEA79FYP21Accident · Serious injuriesClosedThorp T-18 · Zillah, WANTSB OAK79FA030Accident · 1 fatalClosedPiper PA-32 · Groveland, CANTSB MIA79FKG37Accident · Serious injuriesClosedPiper PA-30B · Ball Ground, GANTSB FTW79FRG29Accident · Minor injuriesClosedCessna 150M · Ft.Hood, TXNTSB CHI79FEC25Accident · No injuriesClosedRower Aero Bipe · Sandusky, MINTSB SEA79FYM31Accident · Serious injuriesClosedBaird/Beers AMFS14 · Mcminnville, ORNTSB DEN79FA039Accident · 2 fatalClosedMooney M20F · El Morro, NMNTSB LAX79FA051Accident · 2 fatalClosedGrum-Amer AA-5 · Jerome, AZNTSB ANC79DAA14Accident · No injuriesClosedPiper PA-18 · Unalakleet, AKNTSB SEA79FYK10Accident · Minor injuriesClosedPiper PA-24 · Klamath Falls, ORNTSB NYC79FHM17Accident · Minor injuriesClosedPiper PA-28R · Monsey, NYNTSB NYC79FGT15Accident · 1 fatalClosedGrumman AA1 · Mountville, PANTSB NYC79DHA13Accident · Serious injuriesClosedBell 47G · Weatherly, PANTSB MKC79FCJ17Accident · No injuriesClosedBeech B24R · Bertrand, NENTSB MIA79FLD62Accident · 1 fatalClosedBensen Gyro B-8M · Mulberry, FLNTSB IAD79FIA12Accident · Minor injuriesClosedPiper PA-28 · Pomonkey, MDNTSB CHI79FEV19Accident · No injuriesClosedCessna 152 · Gillespie, ILNTSB CHI79FEM20Accident · No injuriesClosedCessna 310 · Traverse City, MINTSB SEA79FTA14Accident · No injuriesClosedCessna 150 · Billings, MTNTSB MIA79FKJ38Accident · Minor injuriesClosedCessna 182 · Ebro, FLNTSB LAX79FA049Accident · 5 fatalClosedBeech D-50 · Julian, CANTSB FTW79DPJ15Accident · Minor injuriesClosedHughes 269A · Alva, OKNTSB ANC79FA047Accident · No injuriesClosedCessna 185F · Anchorage, AKNTSB MKC79FA028Accident · 1 fatalClosedMaule M-4 · Bowman, NDNTSB SEA79FA032Accident · 1 fatalClosedCessna 150 · John Day, ORNTSB MKC79IA025Incident · No injuriesClosedCessna 210 · Bunker, MONTSB SEA79FA033Accident · 1 fatalClosedCessna 182Q · Quilcene, WA