NTSB investigations, Outside the U.S.
596 cases where the phase of flight was Approach.
Cases per year
| 1962 | 3 |
|---|---|
| 1964 | 9 |
| 1965 | 11 |
| 1966 | 13 |
| 1967 | 8 |
| 1968 | 10 |
| 1969 | 8 |
| 1970 | 6 |
| 1971 | 8 |
| 1972 | 13 |
| 1973 | 10 |
| 1974 | 5 |
| 1975 | 2 |
| 1976 | 3 |
| 1977 | 2 |
| 1978 | 4 |
| 1979 | 1 |
| 1980 | 2 |
| 1984 | 1 |
| 1988 | 1 |
| 1993 | 1 |
| 1995 | 1 |
| 1997 | 2 |
| 1999 | 1 |
| 2002 | 1 |
| 2004 | 1 |
| 2008 | 3 |
| 2009 | 15 |
| 2010 | 7 |
| 2011 | 15 |
| 2012 | 11 |
| 2013 | 30 |
| 2014 | 18 |
| 2015 | 16 |
| 2016 | 34 |
| 2017 | 23 |
| 2018 | 32 |
| 2019 | 30 |
| 2020 | 16 |
| 2021 | 35 |
| 2022 | 32 |
| 2023 | 49 |
| 2024 | 39 |
| 2025 | 43 |
| 2026 | 21 |
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 = 500)
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 = 500)
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 DCA27WA022Incident · No injuriesClass 5 · ForeignBoeing 737 · Cliza, BoliviaNTSB DCA27WA010IncidentClass 5 · ForeignBoeing 737 · Canberra, AustraliaNTSB DCA27WA015Accident · Serious injuriesClass 5 · ForeignAirbus A330-302 · Cassano Magnago, ItalyNTSB DCA26WA372Incident · No injuriesClass 5 · ForeignAirbus Canada BD500 · Garbutt, AustraliaNTSB DCA26WA379Accident · Serious injuriesClass 5 · ForeignBoeing 737 · Warsaw, PolandNTSB DCA26WA295Accident · No injuriesClass 4 · ForeignAmazon.Com Services MK30 · Darlington, United KingdomNTSB DCA26WA277IncidentClass 5 · ForeignAirbus A320 · Longford, United KingdomNTSB DCA26WA283IncidentClass 5 · ForeignBoeing 737 · Tehran, IranNTSB DCA26WA269Incident · No injuriesClass 5 · ForeignBoeing 767 · Callao, PeruNTSB GAA26WA192Accident · No injuriesClass 5 · ForeignSonex Sonex · Lincolnshire, United KingdomNTSB DCA26WA204Incident · No injuriesClass 5 · ForeignBoeing 737 · São Paulo, BrazilNTSB DCA26WA180Incident · No injuriesClass 5 · ForeignBoeing 737 · Harryda, SwedenNTSB DCA26WA163Incident · Minor injuriesClass 5 · ForeignAirbus A350-941 · Sydney, AustraliaNTSB GAA26WA121Accident · No injuriesClass 5 · ForeignCessna 172 · Barreirinhas, BrazilNTSB DCA26WA146Incident · No injuriesClass 5 · ForeignBoeing 737 · Algiers, AlgeriaNTSB DCA26WA158IncidentClass 5 · ForeignBoeing 737 · Cologne, GermanyNTSB DCA26WA143Incident · Minor injuriesClass 5 · ForeignBombardier CL-600-2D24 · Exhuma, BahamasNTSB DCA26WA132IncidentClass 5 · ForeignBoeing 737 · Sao Paulo, BrazilNTSB GAA26WA085Accident · 5 fatalClass 3 · ForeignLearjet 45XR · Sawantwadi, IndiaNTSB DCA26WA108Accident · 10 fatalClass 5 · ForeignATR ATR42 · Makassar, IndonesiaNTSB GAA26WA068Accident · 1 fatalClass 5 · ForeignPiper PA20 · Bloemfontein, South AfricaNTSB GAA26WA052Accident · 10 fatalClass 5 · ForeignCessna 650 · Toluca, MexicoNTSB GAA26WA186AccidentClass 5 · ForeignCessna 208 · Kalumburu, AustraliaNTSB GAA26WA089Accident · Minor injuriesClass 5 · ForeignCessna 172 · Dhana Airfield, IndiaNTSB GAA26WA043Accident · 1 fatalClass 5 · ForeignVulcanair P68 · Waterford Regional Airport, IrelandNTSB DCA26WA042Incident · No injuriesClass 5 · ForeignBoeing 737 · Malaga, SpainNTSB GAA26WA021Accident · No injuriesClass 5 · ForeignPiper PA32RT · Contamana, PeruNTSB GAA26WA014Accident · 1 fatalClass 5 · ForeignTextron 182T · Nuuk, GreenlandNTSB DCA26WA003IncidentClass 5 · ForeignBoeing 737 · Manchester, United KingdomNTSB GAA25WA280Accident · 4 fatalClass 5 · ForeignDehavilland DHC-2 MK. 1 · St Theresa, CanadaNTSB DCA25WA327IncidentClass 5 · ForeignBoeing 767 · Sydney, AustraliaNTSB DCA25WA321Incident · No injuriesClass 5 · ForeignBoeing 737-832 · Belize City, BelizeNTSB GAA25WA274Accident · Minor injuriesClass 5 · ForeignBeech A36 · Guarantã Do Norte, BrazilNTSB DCA25WA318IncidentClass 5 · ForeignBoeing 787 · Frankfurt, GermanyNTSB GAA25WA246Accident · No injuriesClass 5 · ForeignRockwell 112 · Sanat Ana del Yacuma, BoliviaNTSB ENG25WA052AccidentClass 3 · ForeignAirbus A320 · Haute-Corse, FranceNTSB GAA25WA252Incident · No injuriesClass 5 · ForeignCessna 560 · Perth, AustraliaNTSB DCA25WA300IncidentClass 5 · ForeignAirbus A320 · Caloundra, AustraliaNTSB DCA25WA293IncidentClass 5 · ForeignBoeing 747-47UF · Abu Dhabi, United Arab EmiratesNTSB GAA25WA214Incident · No injuriesClass 5 · ForeignCessna 152 · Miranda, VenezuelaNTSB DCA25WA245IncidentClass 5 · ForeignBoeing 737 · Mascot, AustriaNTSB GAA25WA223Accident · 3 fatalClass 5 · ForeignRobin DR400 · Voglans, FranceNTSB DCA25WA257IncidentClass 5 · ForeignBoeing 737 · Melbourne Airport, AustraliaNTSB DCA25WA256IncidentClass 5 · ForeignAirbus A321 · Sydney, AustraliaNTSB GAA25WA201AccidentClass 5 · ForeignAugusta AW119 · Bhubaneswar, IndiaNTSB GAA25WA197Incident · No injuriesClass 5 · ForeignPiper PA31 · Meekatharra, AustraliaNTSB GAA25WA239Accident · 1 fatalClass 3 · ForeignCessna TU206 · Vereda El Canelón, ColombiaNTSB DCA25WA220IncidentForeign investigationBoeing 737 · Lima, PeruNTSB DCA25WA219IncidentClass 5 · ForeignBoeing 737 · Athens, GreeceNTSB DCA25WA182IncidentClass 5 · ForeignBoeing 737 · Cairo, Egypt