NTSB investigations
18,850 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 SEA71FYC35Accident · No injuriesClosedHughes 269B · Portland, ORNTSB FTW71FRA54Accident · No injuriesClosedGrumman G-164 · Eagle Lake, TXNTSB MKC71FCG59Accident · No injuriesClosedPiper PA-28 · Trenton, MONTSB FTW71FRD41Accident · Serious injuriesClosedBoeing A75N1 · Opelousas, LANTSB MKC71AK052Accident · 1 fatalClosedCessna 150H · Lees Summit, MONTSB FTW71FRD42Accident · Serious injuriesClosedBoeing E75 · Maxie, LANTSB FTW71DRD43Accident · No injuriesClosedGrumman G-164 · Abbeville, LANTSB NYC71FGM42Accident · Minor injuriesClosedBell 47G4A · Franklin, PANTSB MKC71DCA31Accident · Minor injuriesClosedPiper PA-25 · Sikeston, MONTSB MIA71FKG75Accident · No injuriesClosedChampion 7ECA · Sylvania, GANTSB FTW71FPJ40Accident · 1 fatalClosedPiper J3C · Lindsay, OKNTSB OAK72DJY13Accident · Minor injuriesClosedPilatus PC6CH2 · Chiang Mai, ThailandNTSB MIA71DKJ53Accident · No injuriesClosedPiper PA-25 · Mccullough, ALNTSB FTW71FPG49Accident · No injuriesClosedBell 47D · Bradley, ARNTSB MIA71FKQ30Accident · Serious injuriesClosedAero Comdr A-9B · Purvis, MSNTSB SEA71DYC30Accident · No injuriesClosedBell 47G5 · Corvallis, ORNTSB OAK71FVG65Accident · Minor injuriesClosedGrumman G-164 · Biggs, CANTSB MIA71FKQ29Accident · 1 fatalClosedPiper PA-25 · Gunnison, MSNTSB CHI71AC075Accident · 2 fatalClosedPiper J3C-65 · Sunbury, OHNTSB OAK71FVD40Accident · Serious injuriesClosedKaman HUK-1 · Lodi, CANTSB MKC71DCD67Accident · No injuriesClosedCessna 180 · Creson, IANTSB FTW71DQG65Accident · No injuriesClosedPiper PA-25 · Spearman, TXNTSB OAK71FVG70Accident · No injuriesClosedNVL Fcty N3N-3 · Orland, CANTSB MIA71AM086Accident · 2 fatalClosedN.American AT-6D · Grant, FLNTSB NYC71FGT12Accident · Serious injuriesClosedPiper PA-24 · Hesston, PANTSB ANC71FAG77Accident · Serious injuriesClosedPiper PA-12 · Eagle River, AKNTSB OAK71DVA65Accident · No injuriesClosedAero Comdr A-9B · Lanare, CANTSB LAX71FUG64Accident · Serious injuriesClosedGrumman G-164A · Vidal, CANTSB NYC71FFA55Accident · No injuriesClosedPiper PA-28 · Underhill, VTNTSB OAK71DVD36Accident · No injuriesClosedChampion 7GC-AA · Santa Rosa, CANTSB OAK71FVG58Accident · Serious injuriesClosedCallair A-9 · Durham, CANTSB LAX71AL058Accident · 2 fatalClosedAero Cmdr 560 · Helendale, CANTSB MIA71FKT46Accident · No injuriesClosedBell 47G · Loxahatchee, FLNTSB MIA71AM083Accident · 2 fatalClosedPiper PA-24 · Americus, GANTSB LAX71DUG63Accident · No injuriesClosedCallair A-9 · Moreno, CANTSB LAX71FUM31Accident · Serious injuriesClosedFairchild M-62C · Chula Vista, CANTSB FTW71FQG66Accident · No injuriesClosedPiper PA-25 · Panhandle, TXNTSB OAK71DVM45Accident · No injuriesClosedCessna 150 · Morgan Hill, CANTSB MIA71FKT50Accident · 1 fatalClosedAero Cmdr A-9B · Belle Glade, FLNTSB MIA71AM075Accident · 1 fatalClosedGlobe GC-1B · Norcross, GANTSB FTW71FRJ28Accident · No injuriesClosedPiper PA-25 · Bossier City, LANTSB MIA71AM073Accident · 2 fatalClosedCessna A150L · Chatom, ALNTSB FTW71DRD35Accident · Minor injuriesClosedGrumman G-164 · Jennings, LANTSB SEA71FWG37Accident · No injuriesClosedGrumman G-164A · St John, WANTSB LAX71AL050Accident · No injuriesClosedCessna 206 · Santa Cruz, CANTSB OAK71DVA55Accident · Minor injuriesClosedAero Comdr A-9 · Red Top, CANTSB LAX71FUA47Accident · No injuriesClosedBell 47D1 · Long Beach, CANTSB LAX71DVM38Accident · No injuriesClosedChampion 7ECA · Paso Robles, CANTSB UNK71X0104Accident · 1 fatalClosedCessna 150L · New Providence, Burkina FasoNTSB IAD71FLJ13Accident · 1 fatalClosedPiper PA-28 · Deep Run, NC