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 NYC80FNC04Accident · No injuriesClosedPiper PA-28 · Bennington, VTNTSB NYC80FA011Accident · 3 fatalClosedCessna 337G · Bennington, VTNTSB DEN80FTE08Accident · Minor injuriesClosedSkybolt Newlnd · Fort Collins, CONTSB NYC80FA010Accident · 3 fatalClosedAerostar 601P · Charlstadt, NJNTSB MKC80FA005Accident · 1 fatalClosedCessna 150D · Stet, MONTSB LAX80FA014Accident · 3 fatalClosedCessna 182Q · Livermore, CANTSB LAX80FA013Accident · 2 fatalClosedPiper PA-28 · Livermore, CANTSB LAX80DVG06Accident · Minor injuriesClosedAero Comdr 100 · Napa, CANTSB MKC80DCA01Accident · No injuriesClosedCessna 150L · Willow Springs, MONTSB LAX80FVW05Accident · No injuriesClosedCessna 150B · Boulder City, NVNTSB IAD80FA010Accident · Serious injuriesClosedCessna 172N · Vienna, VANTSB SEA80IA006Incident · No injuriesClosedBeech 99 · Yakima, WANTSB SEA80FYM05Accident · Minor injuriesClosedCessna R172E · Grass Valley, IDNTSB FTW80IA013Incident · No injuriesClosedAerospatle AS350D · Mansfield, TXNTSB DEN80FQG02Accident · No injuriesClosedCessna 421 · Elida, NMNTSB SEA80DYE08Accident · Serious injuriesClosedPiper PA-18 · Lynnwood, WANTSB FTW80IA012Incident · No injuriesClosedCessna 500 · Dallas, TXNTSB SEA80DYP03Accident · No injuriesClosedBellanca 7KCAB · College Place, WANTSB MIA80AA011Incident · No injuriesClosedDouglas DC-10 · Luxemburg, GeorgiaNTSB FTW80FPA02Accident · No injuriesClosedBellanca 17-30A · Dallas, TXNTSB CHI80FEX02Accident · Serious injuriesClosedCessna 206 · Noblesville, INNTSB FTW80IA010Incident · No injuriesClosedDouglas DC-3C · Grand Prairie, TXNTSB SEA80FYE07Accident · Minor injuriesClosedMaule M-5 · Maple Valley, WANTSB LAX80FVW03Accident · No injuriesClosedCessna 150M · Las Vegas, NVNTSB LAX79FVM07Accident · No injuriesClosedAmer Avco AA-5 · San Jose, CANTSB DEN80DQD02Accident · Minor injuriesClosedCessna 182N · Hacienda Sr Ln, NMNTSB LAX80FVM06Accident · 1 fatalClosedBoeing A75N1 · Paicines, CANTSB LAX80DXQ04Accident · No injuriesClosedCessna 150M · Reno, NVNTSB FTW80FPM04Accident · Minor injuriesClosedNavion B · Smithville, OKNTSB SEA80FYM04Accident · No injuriesClosedBell 206A · Amity, ORNTSB NYC80FA009Accident · No injuriesClosedPiper PA-31 · Stamford, CTNTSB NYC80FHD07Accident · No injuriesClosedHiller UH12B · Mount Holly, NJNTSB CHI80FEI06Accident · Minor injuriesClosedCessna 205 · Mansfield, OHNTSB NYC80FHA02Accident · No injuriesClosedCessna 172H · Hackettstown, NJNTSB NYC80FAMS2Accident · 3 fatalClosedCessna 172 · Shadigee, NYNTSB LAX80DVM05Accident · Minor injuriesClosedCessna 152 · Oceano, CANTSB LAX80DJA03Accident · 1 fatalClosedBeech C-45H · Pacific Ocean (Pacific Ocean)NTSB MIA80FKJ09Accident · Minor injuriesClosedPiper PA-28 · Gadsden, ALNTSB LAX80FUJ08Accident · No injuriesClosedAero Comdr 560 · Tucson, AZNTSB FTW80FRA09Accident · Serious injuriesClosedBeech F35 · Silsbee, TXNTSB FTW80FRA08Accident · No injuriesClosedCessna 182 · Spring Creek, TXNTSB FTW80FRJ07Accident · Minor injuriesClosedCessna 150M · Ruston, LANTSB CHI80FEX01Accident · No injuriesClosedCessna 210E · Fairbanks, INNTSB CHI80DEC03Accident · No injuriesClosedCessna 150M · Napoleon, MINTSB SEA80DYE05Accident · No injuriesClosedHiller Acft UH-12E · Neah Bay, WANTSB NYC80FA008Accident · 1 fatalClosedCessna 152 · New Bedford, MANTSB MIA80FKJ08Accident · No injuriesClosedCessna 177RG · Eufaula, ALNTSB DEN80FA008Accident · 2 fatalClosedCessna 310 · Tucumcari, NMNTSB CHI80DEE06Accident · No injuriesClosedCessna 152 · Rock City, ILNTSB MIA80DLD02Accident · No injuriesClosedCessna 152 · Sebastian, FL