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 DEN81DTM41Accident · No injuriesClosedPiper PA-38 · Promontory Pt, UTNTSB MIA81FA112Accident · 1 fatalClosedPiper PA-22 · Sumatra, FLNTSB CHI81FET11Accident · 1 fatalClosedFairchild M-62A · Coldwater, MINTSB CHI81FA096Accident · 1 fatalClosedCessna 175 · Fenton, ILNTSB ATL81FLJ16Accident · Serious injuriesClosedScorpion 145 · Garner, NCNTSB SEA81FYM42Accident · Serious injuriesClosedPiper PA-28 · Medical Spgs, ORNTSB NYC81FGT11Accident · Minor injuriesClosedCessna 172F · Loyalsockville, PANTSB LAX81FUG49Accident · Serious injuriesClosedQuickie 1 · Wrightwood, CANTSB CHI81FER67Accident · No injuriesClosedBeech P35 · Stephen, MNNTSB ATL81FLG22Accident · Serious injuriesClosedBensen B8M · Lancaster, SCNTSB MKC81FA053Accident · 4 fatalClosedAero Comdr 685 · Kansas City, KSNTSB CHI81FER73Accident · No injuriesClosedHiller UH-12E · Wannaska, MNNTSB CHI81FA098Accident · No injuriesClosedCessna 172N · Muncie, INNTSB ATL81FA112Accident · 3 fatalClosedCessna 172K · Philomath, GANTSB NYC81FA080Accident · 1 fatalClosedPiper PA-23 · Union Township, PANTSB LAX81FVA61Accident · Minor injuriesClosedGulf Amer AA-5 · Independence, CANTSB LAX82FA124Accident · 2 fatalClosedBeech A24R · Yucca Valley, CANTSB LAX81FVA60Accident · No injuriesClosedCessna 152 · Fresno, CANTSB FTW81FA139Accident · 5 fatalClosedMitsubishi MU-2B · Mcleod, TXNTSB ANC81FA105Accident · No injuriesClosedPiper PA-32 · Lk Clark Pass, AKNTSB FTW81FRG62Accident · No injuriesClosedCesswa 150 · Pleasanton, TXNTSB ANC82FA103Accident · 3 fatalClosedPiper PA-23 · Ltl Diomede Is, AKNTSB DEN81FA063Accident · 3 fatalClosedCessna TR182 · 17nne Durango, CONTSB NYC81FHA21Accident · Minor injuriesClosedCessna 152 · Sparta, NJNTSB CHI81FEC42Accident · No injuriesClosedBellanca 7FC · Ann Arbor, MINTSB CHI81FA094Accident · 1 fatalClosedCessna 421C · Rutland, OHNTSB SEA81FA054Accident · 3 fatalClosedBeech C24R · Snoqualmie Ps, WANTSB LAX81FVG65Accident · No injuriesClosedPiper PA-24 · Sacramento, CANTSB FTW81FA138Accident · 2 fatalClosedBeech C24R · Shreveport, LANTSB LAX81FUG47Accident · No injuriesClosedCessna 206 · Riverside, CANTSB LAX81FA122Accident · 4 fatalClosedPiper PA32RT · Happy Camp, CANTSB FTW81FPM21Accident · No injuriesClosedPiper PA-24 · Jenks, OKNTSB FTW81FA135Accident · 2 fatalClosedPiper PA-38 · El Paso, TXNTSB CHI81FEM42Accident · Serious injuriesClosedCessna C210 · Kalamazoo, MINTSB ANC81DAG70Accident · No injuriesClosedInterstate S-1B1 · Whittier, AKNTSB MKC81FCQ49Accident · Minor injuriesClosedCessna 177RG · Leoti, KSNTSB MIA81FKT81Accident · No injuriesClosedBeech D18S · Palm Beach, FLNTSB ANC81FA100Accident · Minor injuriesClosedHughes 369D · Lk Minchumina, AKNTSB FTW81DQA44Accident · No injuriesClosedPiper PA-28 · Clayton, NMNTSB ANC81DAG69Accident · Serious injuriesClosedCessna 185 · Anchorage, AKNTSB MKC81FCJ29Accident · No injuriesClosedPiper PA-25 · Cairo, NENTSB MIA81DLD58Accident · No injuriesClosedPiper PA-28 · Long Boat Key, FLNTSB SEA81DYK15Accident · Minor injuriesClosedCessna 140 · Ashland, ORNTSB MIA81DKJ16Accident · No injuriesClosedPiper PA-24 · Panama City, FLNTSB LAX81FVM27Accident · No injuriesClosedCessna 152 · San Jose, CANTSB MKC81FCG54Accident · No injuriesClosedRockwell 114 · Warrensburg, MONTSB CHI81FEI27Accident · 1 fatalClosedAmeagle Mnbt · Painesville, OHNTSB ANC81FA098Accident · Serious injuriesClosedBell 212 · Kenai, AKNTSB MKC81DCQ50Accident · No injuriesClosedPiper PA-25 · Ness City, KSNTSB MIA81DLD62Accident · Minor injuriesClosedPiper PA-22 · Captiva, FL