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 SEA80DTA11Accident · No injuriesClosedCallair A-9 · Bloomfield, MTNTSB LAX80FVM25Accident · No injuriesClosedMooney M20B · San Carlos, CANTSB LAX80FVG29Accident · No injuriesClosedGrumman G-164A · Princeton, CANTSB FTW80FRG42Accident · No injuriesClosedAero-Cmdr S-2R · Harlingen, TXNTSB LAX80FUJ47Accident · Serious injuriesClosedTR Short P51D · Chandler, AZNTSB SEA80FA026Accident · 1 fatalClosedCessna 172M · So.Lake Tahoe, CANTSB LAX80AA087Accident · 4 fatalClosedBeech 58 · Salinas, CANTSB IAD80FA042Accident · 1 fatalClosedPiper PA-28 · Bowling Green, KYNTSB MIA80FA056Accident · 1 fatalClosedCessna 150L · Alamo, GANTSB MIA80DKT39Accident · No injuriesClosedCessna 172N · Belle Glade, FLNTSB LAX80FA085Accident · Serious injuriesClosedBoeing 707 · Fillmore, CANTSB SEA80DYM32Accident · No injuriesClosedPiper PA-24 · Cascade Locks, ORNTSB NYC80FGM16Accident · 2 fatalClosedGlen-Co RAG-1 · Connoqunsg, PANTSB LAX80FVA33Accident · Serious injuriesClosedCessna 172N · Three Rivers, CANTSB LAX80FA084Accident · 5 fatalClosedCessna 182P · Sn Luis Obspo, CANTSB LAX80FA082Accident · 1 fatalClosedErco 415-C · Volcanoville, CANTSB IAD80FA039Accident · 3 fatalClosedBalloon WKS AX-7 · Hurricane, WVNTSB DEN80FTE40Accident · No injuriesClosedCessna 152 · Ft Collins, CONTSB LAX80DUG30Accident · Minor injuriesClosedHoward DGA-15 · Murrieta, CANTSB IAD80DID16Accident · No injuriesClosedCessna 140 · Chesapeake, VANTSB CHI80FEV21Accident · No injuriesClosedCessna 150M · Danforth, ILNTSB ATL80FKW12Accident · Minor injuriesClosedCessna 206 · Mcminnville, TNNTSB SEA80FYP19Accident · No injuriesClosedBeech 23 · Quincy, WANTSB MKC80FA031Accident · No injuriesClosedCessna 207 · Mclouth, KSNTSB LAX80FVM24Accident · Minor injuriesClosedPiper PA-28 · San Carlos, CANTSB FTW80DQD06Accident · No injuriesClosedCessna 172 · Dell City, TXNTSB DEN80DQD07Accident · No injuriesClosedCessna 150T · Dell City, TXNTSB MIA80FLD67Accident · No injuriesClosedVolksplane VP-1 · Lutz, FLNTSB LAX80DVA30Accident · No injuriesClosedBoeing A75 · Lindsay, CANTSB MIA80FLD58Accident · No injuriesClosedRutan/Fshr Quicke · Melbourne, FLNTSB IAD80DKM16Accident · No injuriesClosedCurtis-Wrt D4D · Candor, NCNTSB LAX80FA079Accident · 2 fatalClosedCessna 150 · Byron, CANTSB LAX80DVA29Accident · Minor injuriesClosedCessna 337D · Carlon, CANTSB ANC80DA039Accident · No injuriesClosedCessna A185F · Wales, AKNTSB FTW80FRD22Accident · Serious injuriesClosedBell 206L-1 · Holly Beach, LANTSB LAX80DVG24Accident · No injuriesClosedCessna 150 · Colusa, CANTSB LAX80DUJ45Accident · Minor injuriesClosedBell 206B · Ashfork, AZNTSB LAX80FVD19Accident · Minor injuriesClosedVarga 2150A · Tracy, CANTSB LAX80FA078Accident · 1 fatalClosedGrum Amer AA-5B · Moraga, CANTSB ATL80FA091Accident · 4 fatalClosedPiper PA-44 · Helen, GANTSB IAD80FA037Accident · 1 fatalClosedCessna 401 · Linville, NCNTSB IAD80DKM15Accident · Minor injuriesClosedCessna 175 · Morgantown, NCNTSB MKC80FA028Accident · Serious injuriesClosedCessna 177B · Edwards, MONTSB MKC80DCA12Accident · Minor injuriesClosedCessna 150 · Spring Creek, MONTSB MIA80FLD52Accident · Serious injuriesClosedBeech 65-80 · Sebring, FLNTSB LAX80DA077Accident · Minor injuriesClosedCessna 337 · Pacific Ocean (Pacific Ocean)NTSB IAD80DKM14Accident · No injuriesClosedBeech A36 · Albemarle, NCNTSB FTW80FA059Accident · 4 fatalClosedCessna 172B · Tomball, TXNTSB MKC80FCJ08Accident · No injuriesClosedCessna 152 · Imperial, NENTSB FTW80DRD21Accident · Minor injuriesClosedCessna 150 · New Orleans, LA