Training

NTSB finding section · Personnel issues › Experience/knowledge

Cases
98
In the probable cause
62 (63%)
Fatal cases
41
NTSB code
020315

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 Training per year: 98 cases
20082
20093
20103
20116
20126
20137
201410
201510
20166
20179
20186
20197
20203
20216
20223
20234
20246
20251
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\", '020315') 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 · 7

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\", '020315') 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\", '020315'))
  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\", '020315') 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 · 98

NTSB ANC25LA064Accident · No injuriesClass 4 · LimitedFinal reportRobinson Helicopter R44 II · Palmer, AKThe pilot’s diverted attention during takeoff in flat light conditions, which resulted in a loss of visual reference with terrain.Jun 30, 2025 · N531AT · Substantial damageNTSB ERA25LA089Accident · Serious injuriesClass 4 · LimitedFinal reportBuckeye Dream Machine · Myakka City, FLThe non-certificated pilot’s improper decision to operate the powered parachute in close proximity to a fence, which resulted in a collision with the fence during takeoff. Also causal was the pilot’s decision to operate the powered parachute without having…Dec 21, 2024 · UNREG · No damageNTSB ERA25LA077Accident · No injuriesClass 4 · LimitedFinal reportWolstenholme Dennis Pietenpol AIR Camper · Tullahoma, TNThe pilot’s failure to adequately secure the airplane before hand-propping the engine. Contributing was the pilot’s lack of training in hand-propping procedures.Dec 12, 2024 · N161DW · Substantial damageNTSB ANC25LA008Accident · Serious injuriesClass 3 · LimitedFinal reportCub Crafters CC18-180 · Anchorage, AKThe incorrect installation of the rear flight control stick, resulting in the pilot’s inability to control the pitch attitude, coupled with the pilot’s inadequate control system check before departure, all which resulted in an aerodynamic stall during takeoff.Nov 2, 2024 · N55PK · Substantial damageNTSB CEN25LA024Accident · No injuriesClass 4 · LimitedFinal reportPitts S-2A · Stoughton, WIThe pilot’s failure to maintain directional control during landing.Oct 19, 2024 · N11JC · Substantial damageNTSB WPR24FA083Accident · 2 fatalClass 2 · FieldFinal reportHawker Beechcraft Hawker 900XP · Westwater, UTThe flight crew’s decision to conduct a post-maintenance stall test in an area of icing conditions, which resulted in wing contamination that significantly decreased the airplane’s critical angle of attack. Also causal was the airplane manufacturer’s lack of…Feb 7, 2024 · N900VA · DestroyedNTSB ERA24LA099Accident · No injuriesClass 3 · LimitedFinal reportSwissdrones Operating SDO 50 V2 · Antioch, GAA partial loss of engine power due to a reduction of fuel flow for undetermined reasons. Contributing to the accident was the UAS manufacturer’s lack of instructions for a partial loss of engine power landing.Jan 18, 2024 · N780PA · Substantial damageNTSB WPR24LA034Accident · Minor injuriesClass 3 · LimitedFinal reportCessna 310 · Hayden, IDThe pilot’s failure to maintain adequate airspeed and his exceedance of the airplane’s critical angle of attack, which resulted in a loss of control and subsequent stall during a precautionary landing. Contributing to the accident was the improper maintenance…Nov 13, 2023 · N86H · Substantial damageNTSB WPR23LA328Accident · No injuriesClass 4 · LimitedFinal reportLuscombe 8A · Hillsboro, ORThe student pilot’s failure to maintain airplane control during the landing roll and the flight instructor’s delayed remedial action, which resulted in a ground loop.Aug 27, 2023 · N28841 · Substantial damageNTSB CEN23LA292Accident · No injuriesClass 4 · LimitedFinal reportCessna 172R · Burlington, VTThe student pilot’s improper landing flare, which resulted in a hard, bounced landing and the flight instructor’s delayed remedial action.Jul 5, 2023 · N64AF · Substantial damage
See all 98 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\", '020315'))
  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.