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 LAX81FUJ51Accident · No injuriesClosedCessna 150 · Globe, AZNTSB LAX81FA106Accident · 2 fatalClosedCessna 177B · Frazier Park, CANTSB FTW81DRA24Accident · No injuriesClosedBoeing A75N1 · El Campo, TXNTSB ATL81FKQ07Accident · Minor injuriesClosedTaylorcraft DL-65 · Laurel, MSNTSB MKC81FCQ29Accident · Serious injuriesClosedCessna 172 · Cullison, KSNTSB LAX81FA075Accident · 1 fatalClosedMooney M20E · Banning, CANTSB DEN81FA028Accident · 2 fatalClosedCessna 172 · Tropic, UTNTSB CHIB1FEM14Accident · Minor injuriesClosedPiper J5A · Covert, MINTSB ATL81DKG14Accident · No injuriesClosedCessna 150 · Oglethorpe, GANTSB NYC81FHM03Accident · Minor injuriesClosedPiper PA-28 · Franklin Lakes, NJNTSB MKC81FCQ28Accident · 1 fatalClosedAyers S2R-34 · Hillsboro, KSNTSB LAX81FA073Accident · 2 fatalClosedPiper PA-28 · Kernville, CANTSB FTW81FQG24Accident · Minor injuriesClosedCessna 210L · Hale Center, TXNTSB FTW81DPA09Accident · Minor injuriesClosedTailwind W-10 · Waco, TXNTSB DCA81AA015Accident · 15 fatalClosedHandly Page HP-137 · Loveland, CONTSB CHI81DEE32Accident · Minor injuriesClosedGrumman AA-5A · Naperville, ILNTSB ATL81FA066Accident · No injuriesClosedMooney M-20F · Conway, SCNTSB ATL81DLA04Accident · No injuriesClosedCessna 177 · Homerville, GANTSB NYC81FHM04Accident · No injuriesClosedBell 47G-2 · Wingdale, NYNTSB NYC81FA045Accident · Minor injuriesClosedN.American T-28 · Portland, MENTSB CHI81FEK14Accident · No injuriesClosedPiper PA-38 · New Concord, OHNTSB ATL81IA065Incident · No injuriesClosedCessna 414 · Montgomery, ALNTSB ANC81DA044Accident · Minor injuriesClosedCessna 150F · Copper Glacier, AKNTSB MKC81DCJ09Accident · No injuriesClosedNavion G · Bayard, NENTSB LAX81FA071Accident · 2 fatalClosedRyan ST3-KR · Ridgecrest, CANTSB LAX81DVA34Accident · No injuriesClosedCessna 150M · Planada, CANTSB LAX81DA074Accident · Serious injuriesClosedPiper PA-18 · Quinn River, NVNTSB DEN81FTM16Accident · No injuriesClosedCessna 152 · Cedar City, UTNTSB ANC81FAA12Accident · No injuriesClosedCessna 180 · Boundary, AKNTSB NYC81FA039Accident · No injuriesClosedStinson 108-1 · Manahawkin, NJNTSB MKC81FA030Accident · No injuriesClosedPiper PA-28R · Hopkins, MONTSB LAX81FUJ49Accident · No injuriesClosedPiper PA-28R · Goodyear, AZNTSB CHI81FA047Accident · 1 fatalClosedNavion A · Platteville, ILNTSB FTW81IA070Incident · No injuriesClosedBell 206B · Gulf Of Mexico (Atlantic Ocean)NTSB FTW81FA069Accident · Minor injuriesClosedAerospatial AS350D · Edmond, OKNTSB CHI81IA048Incident · No injuriesClosedN American 265-65 · Chicago, ILNTSB MIA81FKJ06Accident · No injuriesClosedCessna 172 · Defuniak Spgs, FLNTSB FTW81DPG17Accident · No injuriesClosedPiper PA-25 · Monette, ARNTSB DEN81FTC12Accident · No injuriesClosedPiper PA-18 · Ft Bridger, WYNTSB CHI81FA044Accident · 2 fatalClosedAeronca 65-TAL · West Olive, MINTSB NYC81FNE15Accident · Minor injuriesClosedCessna 150 · Belchertown, MANTSB MIA81FLA18Accident · Minor injuriesClosedCessna 210L · Lake City, FLNTSB LAX81DXQ15Accident · No injuriesClosedBoeing E75 · Silver Springs, NVNTSB FTW81IA066Incident · No injuriesClosedSikorsky S-76A · Morgan City, LANTSB DEN81FTK08Accident · No injuriesClosedCessna 172N · Lennox, SDNTSB CHI81FA043Accident · 1 fatalClosedLear Jet 23 · Cincinnati, OHNTSB MIA81FLD30Accident · No injuriesClosedPiper PA-12 · Indian Rocks, FLNTSB MIA81FA062Accident · Serious injuriesClosedHiller UH-12E · Miami, FLNTSB CHI81DA042Accident · Serious injuriesClosedDouglas DC-10 · Hannibal, MONTSB FTW81DQA19Accident · No injuriesClosedNavion B · Las Vegas, NM