NTSB finding section · Personnel issues › Action/decision

Cases
56
In the probable cause
50 (89%)
Fatal cases
17
NTSB code
020400

NTSB has coded findings and defining events since 2008. Earlier cases used its older occurrence and cause codes, so they aren’t counted here.

When and where

In green, cases where NTSB made it part of the probable cause; in gray, a factor or other finding. Findings are coded with the final report, often a year or more after the event, so the latest years are incomplete.

Cases per year

2008In the probable causeFactor only2026
Cases with Action/decision, general per year: 56 cases
20083
20094
20109
20119
201210
20135
20143
20151
20162
20172
20191
20201
20212
20231
20253
Query with SQL
duckdb -csv -c "SELECT year(c.\"eventDate\") AS year, count(DISTINCT f.case_mkey) AS cases,
    count(DISTINCT f.case_mkey) FILTER (WHERE f.\"inProbableCause\") AS in_probable_cause
  FROM 'https://openairdocs.org/data/latest/ntsb_findings.parquet' f JOIN 'https://openairdocs.org/data/latest/ntsb_case_detail.parquet' c ON c.\"mKey\" = f.case_mkey
  WHERE starts_with(f.\"findingCode\", '020400') AND c.\"eventDate\" >= DATE '2000-01-01'
  GROUP BY 1
  ORDER BY 1"

Prints the counts as CSV. It reads the release’s Parquet files over HTTPS, so there’s nothing to download first. Install DuckDB to run it.

Subsections · 1

Query with SQL
duckdb -csv -c "SELECT left(f.\"findingCode\", 8) AS code, max(f.\"tier4Name\") AS name,
    count(DISTINCT f.case_mkey) AS cases,
    count(DISTINCT f.case_mkey) FILTER (WHERE f.\"inProbableCause\") AS in_probable_cause
  FROM 'https://openairdocs.org/data/latest/ntsb_findings.parquet' f
  WHERE starts_with(f.\"findingCode\", '020400') AND f.\"findingCode\" GLOB '[0-9][0-9]*'
  GROUP BY 1
  ORDER BY cases DESC, code"

Prints the counts as CSV. It reads the release’s Parquet files over HTTPS, so there’s nothing to download first. Install DuckDB to run it.

In the same cases

Query with SQL
duckdb -csv -c "WITH matched AS (SELECT DISTINCT case_mkey, aircrafts_position FROM 'https://openairdocs.org/data/latest/ntsb_findings.parquet' WHERE starts_with(\"findingCode\", '020400'))
  SELECT * FROM (
  SELECT 'Defining event' AS kind, e.\"tier2Number\" AS code, max(e.\"eventTier2Name\") AS name, count(DISTINCT f.case_mkey) AS cases
  FROM matched f JOIN 'https://openairdocs.org/data/latest/ntsb_events.parquet' e ON e.case_mkey = f.case_mkey AND e.aircrafts_position = f.aircrafts_position AND e.\"isDefiningEvent\"
  WHERE e.\"tier2Number\" <> ''
  GROUP BY ALL
  UNION ALL
  SELECT 'Aircraft model', a.aircraft_model_code, any_value(concat_ws(' ', m.manufacturer, m.model)), count(DISTINCT f.case_mkey)
  FROM matched f JOIN 'https://openairdocs.org/data/latest/ntsb_aircrafts.parquet' a ON a.case_mkey = f.case_mkey AND a.position = f.aircrafts_position
  LEFT JOIN 'https://openairdocs.org/data/latest/faa_aircraft_model.parquet' m ON m.code = a.aircraft_model_code
  WHERE a.aircraft_model_code IS NOT NULL
  GROUP BY ALL
  UNION ALL
  SELECT 'Other finding', left(g.\"findingCode\", 8), max(g.\"tier4Name\"), count(DISTINCT g.case_mkey)
  FROM 'https://openairdocs.org/data/latest/ntsb_findings.parquet' g
  WHERE g.case_mkey IN (SELECT case_mkey FROM matched) AND NOT starts_with(g.\"findingCode\", '020400') AND g.\"findingCode\" GLOB '[0-9][0-9]*'
  GROUP BY ALL
  )
  QUALIFY row_number() OVER (PARTITION BY kind ORDER BY cases DESC) <= 10
  ORDER BY kind, cases DESC"

Prints the counts as CSV. It reads the release’s Parquet files over HTTPS, so there’s nothing to download first. Install DuckDB to run it.

Newest cases · 56

NTSB CEN25LA370Accident · No injuriesClass 4 · LimitedFinal reportBoeing E75 · Benton, KSThe pilot's failure to maintain clearance from a moving vehicle during an evasive maneuver from a perceived conflict with another airplane. Contributing to the accident was the pilot of the other airplane’s non-standard phraseology and inaccurate position…Sep 7, 2025 · N75675 · Substantial damageNTSB CEN25LA337Accident · Minor injuriesClass 4 · LimitedFinal reportBell OH-58A · Caseville, MIThe front seat passenger’s inadvertent movement of the cyclic control resulting in a dynamic rollover after landing. Contributing to the accident was the pilot’s decision to leave the dual flight controls installed with a non-pilot passenger in the front seat.Aug 23, 2025 · N707EE · Substantial damageNTSB CEN25LA344Accident · No injuriesClass 4 · LimitedFinal reportCessna 210 · Markesan, WIThe pilot’s failure to attain a proper touchdown point which resulted in a long landing and subsequent runway overrun.Aug 21, 2025 · N761SV · Substantial damageNTSB ERA24FA050Accident · 1 fatalClass 3 · FieldFinal reportPiper PA32R · Attalla, ALThe undetected wear of both pawl retaining rivets of the left magneto impulse coupling and fatigue failure of one pawl retaining rivet, which led to cascading fractures of the second pawl retaining rivet, left gear retainer assembly, and gear teeth of…Nov 27, 2023 · N4187Q · DestroyedNTSB CEN22LA033Accident · No injuriesClass 4 · LimitedFinal reportRobinson Helicopter R22 Beta · Freer, TXThe pilot’s encounter with ‘settling with power’ while maneuvering at a low altitude, which resulted in a rapid descent and subsequent hard landing.Nov 10, 2021 · N7198A · Substantial damageNTSB ERA21LA190Accident · No injuriesClass 3 · LimitedFinal reportCessna 182M · Eufaula, ALA total loss of engine power for reasons that could not be determined based on the available information.Apr 20, 2021 · N91606 · Substantial damageNTSB CEN20LA159Accident · Serious injuriesClass 3 · LimitedFinal reportPilatus PC12 · Mesquite, TXThe loss of engine power due to a mis-rigged beta control cable (propeller reversing cable), which resulted in a loss of thrust inflight.Apr 23, 2020 · N477SS · Substantial damageNTSB CEN20FA019Accident · 1 fatalClass 3 · FieldFinal reportRaytheon A36 · San Marcos, TXThe pilot’s loss of control shortly after takeoff in instrument meteorological conditions for reasons that could not be determined based on the available information.Nov 20, 2019 · N88855 · DestroyedNTSB CEN17LA336Accident · Serious injuriesLimited investigationFinal reportHughes 369A · Burnet, TXThe pilot's inadequate inflight decision making, which resulted in a total loss of engine power due to fuel exhaustion.Sep 2, 2017 · N50MP · Substantial damageNTSB WPR17LA190Accident · Minor injuriesLimited investigationFinal reportBeech M35 · Lake Havasu City, AZThe pilot's incorrect positioning of the fuel tank selector valve during a tank switch, which resulted in fuel starvation and a loss of engine power. Contributing to the accident was the worn condition of the fuel selector valve handle position detents and…Aug 29, 2017 · N339Z · Substantial damage
See all 56 cases
Query with SQL
duckdb -csv -c "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 f.case_mkey FROM 'https://openairdocs.org/data/latest/ntsb_findings.parquet' f WHERE starts_with(f.\"findingCode\", '020400'))
  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.