NTSB investigations, Outside the U.S.
646 cases where the phase of flight was Takeoff.
Cases per year
| 1962 | 1 |
|---|---|
| 1964 | 9 |
| 1965 | 8 |
| 1966 | 6 |
| 1967 | 5 |
| 1968 | 9 |
| 1969 | 6 |
| 1970 | 5 |
| 1971 | 4 |
| 1972 | 5 |
| 1973 | 4 |
| 1974 | 7 |
| 1975 | 5 |
| 1976 | 2 |
| 1977 | 2 |
| 1978 | 1 |
| 1979 | 2 |
| 1980 | 1 |
| 1995 | 1 |
| 1996 | 1 |
| 2007 | 1 |
| 2008 | 9 |
| 2009 | 7 |
| 2010 | 8 |
| 2011 | 15 |
| 2012 | 11 |
| 2013 | 9 |
| 2014 | 18 |
| 2015 | 29 |
| 2016 | 29 |
| 2017 | 42 |
| 2018 | 29 |
| 2019 | 32 |
| 2020 | 30 |
| 2021 | 39 |
| 2022 | 41 |
| 2023 | 61 |
| 2024 | 71 |
| 2025 | 55 |
| 2026 | 26 |
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.\"mKey\" IN (SELECT case_mkey FROM case_phases WHERE main = 300)
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."mKey" IN (SELECT case_mkey FROM case_phases WHERE main = 300)
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 DCA26WA335IncidentClass 5 · ForeignAirbus A320 · Guarulhos, BrazilNTSB DCA26WA311IncidentClass 5 · ForeignBoeing 787 · Munich, GermanyNTSB DCA26WA332IncidentClass 5 · ForeignBoeing 737 · Mascot, AustraliaNTSB ENG26WA033OccurrenceClass 5 · ForeignBoeing 737 · Cancun, MexicoNTSB ENG26WA038Incident · No injuriesClass 5 · ForeignEmbraer EMB145 · Luanda, AngolaNTSB DCA26WA301Incident · No injuriesClass 5 · ForeignAirbus A321 · Brasilia, BrazilNTSB DCA26WA296Occurrence · No injuriesClass 5 · ForeignBoeing 737 · Hargeisa, SomaliaNTSB DCA26WA281Accident · No injuriesClass 5 · ForeignMcdonnell Douglas MD80 · Dachi Su, KyrgyzstanNTSB GAA26WA241Accident · Minor injuriesClass 5 · ForeignCirrus SR22 · Neropolis, BrazilNTSB DCA26WA239Incident · No injuriesClass 3 · ForeignAirbus A380 · Dubai, United Arab EmiratesNTSB DCA26WA243Occurrence · No injuriesClass 5 · ForeignBombardier CL-600-2D24 · Montreal, CanadaNTSB ENG26WA030IncidentClass 5 · ForeignAirbus A321 · Zapote del Valle, MexicoNTSB GAA26WA223Accident · 1 fatalClass 5 · ForeignBell 206 · Lesa, ItalyNTSB DCA26WA209Incident · No injuriesClass 5 · ForeignAirbus 220 · Split, CroatiaNTSB DCA26WA212AccidentClass 3 · ForeignBoeing 737 · Muscat, OmanNTSB ENG26WA028IncidentClass 5 · ForeignAirbus A321 · Ciudad de México, MexicoNTSB GAA26WA180Incident · Minor injuriesClass 5 · ForeignCostruzioni Aeronautiche Tecna P92 Eaglet · Dajabon, Dominican RepublicNTSB GAA26WA182IncidentClass 5 · ForeignPiper PA60 · Villavicencio, ColombiaNTSB GAA26WA144Accident · No injuriesClass 5 · ForeignCessna 182 · Pucallpa, PeruNTSB DCA26WA220Occurrence · No injuriesClass 5 · ForeignBoeing 737-832 · San Miguel de Cozumel, MexicoNTSB DCA26WA162Accident · No injuriesClass 5 · ForeignBoeing 737 · Misawa, JapanNTSB GAA26WA115Accident · No injuriesClass 5 · ForeignPiper PA-28-140 · Abbots Bromley, United KingdomNTSB DCA26WA136Incident · No injuriesClass 5 · ForeignMcdonnell Douglas DC-9 · Maiquetía, VenezuelaNTSB DCA26WA120Incident · No injuriesClass 5 · ForeignBoeing 737 · Melbourne Airport, AustraliaNTSB GAA26WA106Accident · Minor injuriesClass 5 · ForeignCessna 182 · Carumba, BrazilNTSB GAA26WA093Accident · No injuriesClass 5 · ForeignPiper PA-28-181 · Lelystad, NetherlandsNTSB DCA26WA101Incident · No injuriesClass 5 · ForeignBoeing 737 · Mexico City, MexicoNTSB DCA26WA257IncidentClass 5 · ForeignGippsAero GA8 · Whitemark, AustraliaNTSB DCA26WA067IncidentClass 5 · ForeignBoeing 737 · Barquisimeto, VenezuelaNTSB DCA26WA072Incident · No injuriesClass 5 · ForeignBoeing 727 · Bogotá, ColombiaNTSB GAA26WA036Accident · No injuriesClass 5 · ForeignBeech E90 · Para De Minas, BrazilNTSB DCA26WA049AccidentClass 5 · ForeignBoeing 737 · Seville, SpainNTSB DCA26WA032IncidentClass 5 · ForeignFairchild 22C7 · South Mackay, AustraliaNTSB DCA26WA050Incident · No injuriesClass 5 · ForeignBoeing 737 · Heliopolis, EgyptNTSB DCA26WA022IncidentClass 5 · ForeignBoeing 737 · Bogotá, ColombiaNTSB GAA26WA015Accident · 1 fatalClass 5 · ForeignCessna 208 · Diani, KenyaNTSB GAA25WA278AccidentClass 5 · ForeignBeechraft C90A · Sakwai, IndiaNTSB ENG26WA001IncidentClass 5 · ForeignSaab 340 · Adelaide Aerodrome, AustraliaNTSB GAA25WA266Accident · 2 fatalClass 3 · ForeignLearjet 55 · La Guaira, VenezuelaNTSB GAA25WA283AccidentClass 5 · ForeignGulfstream GIV · Singapore, SingaporeNTSB DCA25WA337IncidentClass 4 · ForeignBoeing 737 · Cancun, MexicoNTSB GAA25WA290Accident · No injuriesClass 5 · ForeignBeech 90 · Farrukabad, IndiaNTSB DCA25WA347Incident · No injuriesClass 5 · ForeignBoeing 737 · Trelew, ArgentinaNTSB GAA25WA251Accident · 2 fatalClass 5 · ForeignMooney M20J · Norrtälje, SwedenNTSB DCA25WA340Incident · No injuriesClass 5 · ForeignAirbus Canada A220 · Toronto, CanadaNTSB GAA25WA261Accident · 2 fatalClass 5 · ForeignSkystar Kitfox · Casey, CanadaNTSB DCA25WA317Incident · No injuriesClass 4 · ForeignBoeing 737 · Aktion, GreeceNTSB GAA25WA275AccidentClass 5 · ForeignCessna 172 · Islamabad, PakistanNTSB DCA25WA309IncidentClass 5 · ForeignAirbus A320-214 · Villahermosa, MexicoNTSB GAA25WA237Accident · No injuriesClass 5 · ForeignCessna 210 · San Lorenzo, Bolivia