NTSB investigations
18,851 cases where the phase of flight was Maneuvering.
Cases, newest first
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.\"mKey\" IN (SELECT case_mkey FROM case_phases WHERE main = 450)
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."mKey" IN (SELECT case_mkey FROM case_phases WHERE main = 450)
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 CHI75FEA23Accident · Serious injuriesClosedPiper PA-36 · Vincennes, INNTSB MKC75FCQ51Accident · 1 fatalClosedChampion 7GCBC · Hill City, KSNTSB FTW75DQG56Accident · No injuriesClosedBoeing E75 · Aspermont, TXNTSB FTW75AF071Accident · 2 fatalClosedPiper PA-22 · Gore, OKNTSB CHI75DEV36Accident · No injuriesClosedBell 47D-1 · Carmi, ILNTSB MKC75AK060Accident · Minor injuriesClosedPiper PA-25 · Gothenburg, NENTSB FTW75FQG55Accident · 1 fatalClosedCessna A188 · Vega, TXNTSB FTW75DRA31Accident · No injuriesClosedGrumman G-164A · Garwood, TXNTSB DEN75DTE74Accident · Minor injuriesClosedCallair A-5 · Ft Morgan, CONTSB MKC75DTG22Accident · No injuriesClosedPiper PA-25 · Lisbon, NDNTSB MKC75DER73Accident · No injuriesClosedBell 47G2 · Rosemount, MNNTSB MIA75FKG77Accident · 2 fatalClosedN.American B-25H · Dawsonville, GANTSB CHI75DEC53Accident · Minor injuriesClosedPitts S-1C · Chelsea, MINTSB DEN75FTC29Accident · 1 fatalClosedCessna A188 · Wheatland, WYNTSB MKC75AK058Accident · 2 fatalClosedAeronca 7BCM · Ogallala, NENTSB SEA75DTI32Accident · No injuriesClosedBoeing E75 · Brady, MTNTSB FTW75FRG84Accident · Serious injuriesClosedAir Tractor AT-301 · Los Fresnos, TXNTSB OAK75FVG72Accident · Serious injuriesClosedBoeing A75N1 · Tulelake, CANTSB NYC75FHD48Accident · No injuriesClosedPiper PA-25 · Monroeville, NJNTSB IAD75AI062Accident · 2 fatalClosedLockheed 18 · Rockwood, TNNTSB CHI75FEI55Accident · Serious injuriesClosedPiper PA-25 · Wooster, OHNTSB OAK75AP053Accident · 2 fatalClosedErco 415-C · San Andreas, CANTSB SEA75FTA19Accident · Minor injuriesClosedCessna 210F · Pompeys Pillar, MTNTSB FTW75DPG69Accident · Minor injuriesClosedCessna 188B · Elaine, ARNTSB FTW75DPG77Accident · No injuriesClosedGrumman G-164 · Crockett Bluff, ARNTSB FTW75DPG70Accident · No injuriesClosedTomcat MK-5 · Corning, ARNTSB FTW75DPG68Accident · Minor injuriesClosedBell 47G-2 · Denmark, ARNTSB MKC75AK056Accident · 2 fatalClosedBeech A45 · Northwood, NDNTSB FTW75FRA28Accident · 1 fatalClosedPiper PA-25 · Cameron, TXNTSB MIA75FKG73Accident · Minor injuriesClosedPiper PA-28 · Duluth, GANTSB OAK75FVG70Accident · No injuriesClosedGrumman TBM-3 · Winters, CANTSB OAK75FVG69Accident · Minor injuriesClosedPiper PA-25 · Manton, CANTSB IAD75FID21Accident · Minor injuriesClosedBell 47G4 · Creeds, VANTSB FTW75DRD61Accident · Minor injuriesClosedBoeing E75 · Mermentau, LANTSB SEA75DYG39Accident · No injuriesClosedBell 47G-2 · Mesa, WANTSB OAK75AP052Accident · 1 fatalClosedCessna 150A · Kingsburg, CANTSB MKC75FCJ57Accident · Serious injuriesClosedPiper PA-25 · Fairbury, NENTSB OAK75DVD48Accident · No injuriesClosedBell 47G-5 · Oakland, CANTSB FTW75DRD59Accident · No injuriesClosedGruman G-164A · Gueydan, LANTSB FTW75FRO56Accident · Serious injuriesClosedGrumman G-164A · Welsh, LANTSB SEA75DYA42Accident · No injuriesClosedHughes 269A1A · Burley, IDNTSB MIA75AM080Accident · 2 fatalClosedPiper J3C-65 · Damascus, GANTSB FTW75AF066Accident · 1 fatalClosedErco 415-CD · Goldthwaite, TXNTSB MKC75FCJ53Accident · No injuriesClosedBrantly B305 · Omaha, NENTSB MIA75FKJ60Accident · No injuriesClosedEnstrom F-28A · Dora, ALNTSB LAX75FVA63Accident · Serious injuriesClosedBoeing A75 · Wasco, CANTSB FTW75FPG61Accident · Serious injuriesClosedPiper PA-36 · Monette, ARNTSB FTW75DPG64Accident · No injuriesClosedGrumman G-164A · Oil Trough, ARNTSB SEA75DYG37Accident · No injuriesClosedBell 47G3B1 · Palouse, WANTSB FTW75FRD53Accident · No injuriesClosedGrumman G-164A · Welsh, LA