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 MIA81DKT11Accident · No injuriesClosedCessna 210 · Key Largo, FLNTSB DEN81FTA02Accident · No injuriesClosedBeech V35B · Billings, MTNTSB SEA81FYM09Accident · Minor injuriesClosedBell 47G-3 · Buell, ORNTSB NYC81DFJ02Accident · Serious injuriesClosedSchweizer 1-34R · Dansville, NYNTSB MKC81FCD01Accident · Minor injuriesClosedCessna 120 · La Porte City, IANTSB DEN81FTK03Accident · No injuriesClosedCessna 152 · Dell Rapids, SDNTSB DEN81FTM04Accident · Serious injuriesClosedPiper PA-28 · Woodland, UTNTSB SEA81FA006Accident · No injuriesClosedPiper PA32RT · Oakley, IDNTSB MKC81FCQ04Accident · No injuriesClosedPiper PA-28 · Wichita, KSNTSB MKC81FA007Accident · No injuriesClosedAvions Mrcl 10 · Kansas City, MONTSB ATL81IA017Incident · No injuriesClosedCessna 340A · Rome, GANTSB SEA81DYE08Accident · No injuriesClosedHiller Acft UH-12E · Forks, WANTSB LAX81FA017Accident · 1 fatalClosedHughes 369D · Kaaawa, HINTSB LAX81DUQ06Accident · No injuriesClosedCessna 150 · Van Nuys, CANTSB FTW81FA009Accident · 1 fatalClosedAerospatle SA316B · Gallup, NMNTSB SEA81FA005Accident · 2 fatalClosedCessna U206F · Bonners Ferry, IDNTSB FTW81FA008Accident · 2 fatalClosedBellanca 7KCAB · Nursery, TXNTSB CHI81FA007Accident · Serious injuriesClosedBeech V35A · Pimento, INNTSB MIA81IA015Incident · No injuriesClosedDehavilland DH-114 · Immokalee, FLNTSB LAX81FA016Accident · 1 fatalClosedCessna 172N · Fillmore, CANTSB LAX81FA014Accident · 1 fatalClosedBeech K35 · Big Bear Lake, CANTSB DEN81FTE06Accident · Serious injuriesClosedCessna 172 · Salida, CONTSB ANC80FA010Accident · Serious injuriesClosedBell 206B · Pilot Point, AKNTSB LAX81FUM05Accident · Minor injuriesClosedCessna 150 · El Cajon, CANTSB CHI81FEV04Accident · No injuriesClosedPiper PA-25 · Chrisman, ILNTSB ATL81FA018Accident · 2 fatalClosedPiper PA-28 · Corbin, KYNTSB SEA81DYA05Accident · No injuriesClosedCessna 182P · Blackfoot, IDNTSB NYC81FGM05Accident · No injuriesClosedCessna 172H · Clarion, PANTSB NYC81FFA06Accident · Serious injuriesClosedCessna T210K · Duanesburg, NYNTSB LAX81FA013Accident · 1 fatalClosedCessna 172 · Winnemucca, NVNTSB MKC81DCA04Accident · No injuriesClosedPiper PA-24 · Des Arc, MONTSB MIA81FA014Accident · 4 fatalClosedBell 206B · Atlantic Ocean (Atlantic Ocean)NTSB ATL81IA015Incident · Serious injuriesClosedBoeing 707 · Memphis, TNNTSB MIA81IA013Incident · No injuriesClosedDouglas DC-8 · Miami, FLNTSB FTW81DRD06Accident · No injuriesClosedPiper PA-25 · White Castle, LANTSB NYC81FAMS1Accident · 4 fatalClosedPiper PA-31 · Bridgeport, CTNTSB FTW81FQA09Accident · Serious injuriesClosedCessna P210N · Otto, NMNTSB CHI81FEC04Accident · No injuriesClosedCessna 182Q · Britton, MINTSB ANC81DA005Accident · No injuriesClosedBell 206L · Atmauthluk, AKNTSB FTW81FPD03Accident · Serious injuriesClosedHughes 269A · Newport, TXNTSB MIA81FKJ03Accident · No injuriesClosedBell 47D1 · Panama City, FLNTSB FTW81DPA01Accident · Minor injuriesClosedBoeing E75 · Mckinney, TXNTSB CHI81FEI06Accident · Serious injuriesClosedCessna 152 · Youngstown, OHNTSB NYC81FHD07Accident · Serious injuriesClosedCessna 177RG · Vineland, NJNTSB FTW81DRA06Accident · No injuriesClosedPiper PA-24 · Iola, TXNTSB MIA81DKT09Accident · Minor injuriesClosedPiper PA-31 · Naples, FLNTSB ATL81DLG05Accident · No injuriesClosedCessna 152 · Murrells Inlet, SCNTSB LAX81IA011Incident · No injuriesClosedBeech A36 · Oroville, CANTSB NYC81FGT01Accident · Minor injuriesClosedCessna 150 · Pine Grove Mls, PANTSB NYC81FGM04Accident · Serious injuriesClosedAerosport Quail · Rostraver, PA