Fatal NTSB investigations, Outside the U.S.
587 cases where the phase of flight was Enroute.
Cases per year
| 1962 | 1 |
|---|---|
| 1964 | 8 |
| 1965 | 4 |
| 1966 | 3 |
| 1967 | 3 |
| 1968 | 2 |
| 1969 | 10 |
| 1970 | 4 |
| 1971 | 4 |
| 1972 | 6 |
| 1973 | 5 |
| 1974 | 4 |
| 1975 | 5 |
| 1977 | 1 |
| 1978 | 5 |
| 1979 | 1 |
| 1981 | 1 |
| 1984 | 1 |
| 1986 | 1 |
| 1988 | 1 |
| 1997 | 1 |
| 2002 | 1 |
| 2003 | 1 |
| 2004 | 1 |
| 2007 | 1 |
| 2008 | 8 |
| 2009 | 17 |
| 2010 | 17 |
| 2011 | 25 |
| 2012 | 25 |
| 2013 | 30 |
| 2014 | 20 |
| 2015 | 37 |
| 2016 | 37 |
| 2017 | 29 |
| 2018 | 38 |
| 2019 | 58 |
| 2020 | 27 |
| 2021 | 31 |
| 2022 | 25 |
| 2023 | 23 |
| 2024 | 34 |
| 2025 | 24 |
| 2026 | 7 |
Latest cases
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.\"eventCountry\" <> 'USA'
AND c.\"highestInjuryLevel\" = 'Fatal'
AND 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."eventCountry" <> 'USA'
AND c."highestInjuryLevel" = 'Fatal'
AND 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 GAA26WA285Accident · 7 fatalClass 5 · ForeignEurocopter EC130 · Ewaso Nyiro, KenyaNTSB GAA26WA249Accident · 10 fatalClass 3 · ForeignCessna 402C · Nicholls Town, BahamasNTSB GAA26WA130Accident · 1 fatalClass 5 · ForeignRobinson R44 · Drake, AustraliaNTSB GAA26WA102Accident · 1 fatalClass 5 · ForeignBeech 200 · Normanton, AustraliaNTSB DCA26WA113Accident · 2 fatalClass 5 · ForeignEmbraer EMB-110P1 · Les Cayes, HaitiNTSB DCA26WA105Accident · 15 fatalClass 5 · ForeignBeech 1900 · Santander, ColombiaNTSB GAA26WA086Accident · 2 fatalClass 5 · ForeignVans RV-8A · Norwell, AustraliaNTSB GAA26WA057Accident · 1 fatalClass 5 · ForeignLancair 360 · Mazarambroz, SpainNTSB GAA26WA051Accident · 2 fatalClass 5 · ForeignBell 206 · Ranana, New ZealandNTSB GAA26WA019Accident · 1 fatalClass 4 · ForeignRans S9 · San Felipe, ChileNTSB GAA26WA200Accident · 1 fatalClass 5 · ForeignBRM Aero Bristell NG5 · Bacani, Vaslui, RomaniaNTSB GAA26WA010Accident · 3 fatalClass 5 · ForeignCessna TU206 · Tecpan, GuatemalaNTSB GAA26WA004Accident · 2 fatalClass 5 · ForeignCessna 172 · Santa Ana del Yacuma, BoliviaNTSB GAA25WA291Accident · 1 fatalClass 5 · ForeignPilatus PC6 · Moruya, AustraliaNTSB GAA25WA263Accident · 2 fatalClass 5 · ForeignBell 412 · Talpa de Allende, MexicoNTSB GAA25WA243Accident · 4 fatalClass 3 · ForeignCessna TU206 · Mitu, ColombiaNTSB GAA25WA260Accident · 1 fatalClass 4 · ForeignAerospool WT9 Dynamic LSA · Orbe, SwitzerlandNTSB GAA25WA221Accident · 1 fatalClass 5 · ForeignGrumman AA5 · Ottawa, Ontario, CanadaNTSB GAA25WA191Accident · 1 fatalClass 4 · ForeignRobinson R44 · Naboonspruit, South AfricaNTSB GAA25WA188Accident · 1 fatalClass 5 · ForeignRand Robinson KR2 · Klint, GermanyNTSB GAA25WA186Accident · 1 fatalClass 4 · ForeignCessna 210 · Lanseria, South AfricaNTSB GAA25WA172Accident · 2 fatalClass 5 · ForeignBeech B36 · Korschenbroich, GermanyNTSB GAA25WA154Accident · 6 fatalClass 5 · ForeignPiper PA31T · La Palma, ChileNTSB GAA25WA157Accident · 1 fatalClass 5 · ForeignCessna 182 · Oriximina, BrazilNTSB GAA25WA113Accident · 1 fatalClass 5 · ForeignMooney M20R · Velika Planina, SloveniaNTSB GAA25WA114Accident · 1 fatalClass 5 · ForeignCessna 150 · Peruibe, BrazilNTSB GAA25WA083Accident · 1 fatalClass 5 · ForeignCessna C185F · Naivasha, KenyaNTSB GAA25WA070Accident · 2 fatalClass 3 · ForeignCessna 182 · Región del Bio Bio, ChileNTSB GAA25WA064Accident · 3 fatalClass 4 · ForeignBell Textron Canada 407 · Paredones Commune, ChileNTSB GAA25WA058Accident · 3 fatalClass 5 · ForeignCessna 172 · Nairobi, KenyaNTSB GAA25WA053Accident · 10 fatalClass 4 · ForeignCessna 402 · Medellin, ColombiaNTSB DCA25WA079Accident · 1 fatalClass 3 · ForeignAirbus Canada A220 · Graz, AustriaNTSB GAA25WA203Accident · 7 fatalClass 5 · ForeignCessna C207 · Nayarit, MexicoNTSB GAA25WA059Accident · 1 fatalClass 4 · ForeignPiper PA25 · Nova Monte, BrazilNTSB GAA25WA032Accident · 5 fatalClass 5 · ForeignCessna U206 · Cantón Central San José y Distrito de Pavas, Costa RicaNTSB GAA25WA033Accident · 2 fatalClass 5 · ForeignPiper PA-28-140 · Cimanes del Tejar, SpainNTSB GAA25WA034Accident · 1 fatalClass 5 · ForeignCessna 188 · Quirinopolis, BrazilNTSB GAA25WA013Accident · 1 fatalClass 5 · ForeignAir Tractor AT502 · Ouro Preto - Minas Gerais, BrazilNTSB GAA24WA293Accident · 2 fatalClass 5 · ForeignCessna 172 · Soest, GermanyNTSB GAA24WA272Accident · 1 fatalClass 5 · ForeignBeech 58 · Amatschonjoch, AustriaNTSB GAA24WA266Accident · 2 fatalClass 3 · ForeignCessna 152 · Jamshedpur, IndiaNTSB GAA24WA271Accident · 5 fatalClass 5 · ForeignBeech C90 · Apiacas, BrazilNTSB GAA24WA322Accident · 1 fatalClass 5 · ForeignWassmer WA54 · Chartres, FranceNTSB GAA24WA260Accident · 1 fatalClass 5 · ForeignCessna 152 · Santa Fe, ArgentinaNTSB GAA24WA259Accident · 1 fatalClass 5 · ForeignCessna 182 · Provincia de Neuquén, ArgentinaNTSB GAA24WA202Accident · 1 fatalClass 5 · ForeignStearman A75 · Hasselt, BelgiumNTSB GAA24WA198Accident · 1 fatalClass 5 · ForeignCessna 310 · Yoro, HondurasNTSB GAA24WA186Accident · 2 fatalClass 5 · ForeignPiper PA46 · Sorriso, BrazilNTSB GAA24WA214Accident · 2 fatalClass 5 · ForeignBeech 55 · Santa Catarina, BrazilNTSB GAA24WA182Accident · 2 fatalClass 5 · ForeignMurphy Rebel · Squamish, Canada