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 OAK71DVM15Accident · No injuriesClosedWeatherly 201A · Soledad, CANTSB MIA71FLD10Accident · Minor injuriesClosedBell 47G-5 · Frostproof, FLNTSB MKC71DCD24Accident · No injuriesClosedCallair A-9 · Paton, IANTSB FTW71FRJ09Accident · No injuriesClosedPiper PA-25 · Cheneyville, LANTSB MIA71DKJ12Accident · Minor injuriesClosedPiper PA-18A · Canoe, ALNTSB LAX71DVA20Accident · Serious injuriesClosedBoeing 75 · Wasco, CANTSB SEA71AS009Accident · 1 fatalClosedLuscombe 8E · Orting, WANTSB NYC71FFG03Accident · No injuriesClosedCessna 150G · Washburn, MENTSB MIA71RM014Accident · 4 fatalClosedBeech 95-A55 · Spanish W, Burkina FasoNTSB CHI71DBA12Accident · No injuriesClosedPiper PA-25 · Washington, INNTSB OAK71DVM10Accident · No injuriesClosedPitts S1C · Santa Cruz, CANTSB LAX71FUJ16Accident · 1 fatalClosedGrumman G-164 · Yuma, AZNTSB SEA71DXM08Accident · No injuriesClosedPiper PA-25 · Nampa, IDNTSB LAX71AL006Accident · 2 fatalClosedBeech 36 · Tucson, AZNTSB FTW71FRJ08Accident · No injuriesClosedPiper PA-18A · Colfax, LANTSB SEA71FWA09Accident · No injuriesClosedBell 47G-4A · Estacada, ORNTSB OAK71FXQ10Accident · Serious injuriesClosedPiper PA-18 · Beckwourth, CANTSB OAK71DXQ11Accident · Serious injuriesClosedHarlow A9B · Orovada, NVNTSB MKC71AK008Accident · 1 fatalClosedPiper PA-18 · Merriman, NENTSB FTW71DQG24Accident · No injuriesClosedPiper PA-25 · Nazareth, TXNTSB NYC71FFM10Accident · No injuriesClosedIntermount A-9 · Southwick, MANTSB MKC71FCQ11Accident · No injuriesClosedPiper PA-25 · Friend, KSNTSB MIA71FKQ06Accident · No injuriesClosedPiper PA-25 · Ruleville, MSNTSB FTW71FQG18Accident · No injuriesClosedBoeing E75 · Bovina, TXNTSB FTW71FPG10Accident · 1 fatalClosedPiper PA-25 · Heth, ARNTSB FTW71FPA02Accident · No injuriesClosedCessna 150J · Seagoville, TXNTSB MIA71FKG19Accident · No injuriesClosedCessna 188A · Leesburg, GANTSB IAD71FID04Accident · No injuriesClosedPiper PA-25 · Zuni, VANTSB FTW71FQG17Accident · Minor injuriesClosedPiper PA-25 · Olton, TXNTSB CHI71AC011Accident · 1 fatalClosedCessna 172 · Wooster, OHNTSB NYC71DFG01Accident · Minor injuriesClosedPiper PA-20 · Pittsfield, MENTSB LAX71FUJ12Accident · 1 fatalClosedBoeing A75N1 · Somerton, AZNTSB FTW71FPG08Accident · No injuriesClosedCallair A-9B · Grady, ARNTSB FTW71DQG15Accident · Minor injuriesClosedPiper PA-25 · Hart, TXNTSB MIA71FKQ03Accident · 1 fatalClosedBoeing B75N1 · Glendora, MSNTSB FTW71FPG07Accident · 1 fatalClosedCallair A-9B · Coy, ARNTSB MIA71DKD03Accident · No injuriesClosedPiper PA-25 · Bolivar, TNNTSB MIA71AM011Accident · 2 fatalClosedCessna 150K · Miami Beach, FLNTSB IAD71FIG05Accident · No injuriesClosedBeech A23-19 · Whiteford, MDNTSB FTW71FQG21Accident · Minor injuriesClosedSnow 600S2C · Hereford, TXNTSB DEN71FXD16Accident · No injuriesClosedCessna 150H · Fort Collins, CONTSB SEA71FXM06Accident · Minor injuriesClosedPiper PA-25 · Homedale, IDNTSB OAK71DVG06Accident · No injuriesClosedGrumman G-164 · Yuba City, CANTSB LAX71FUQ14Accident · Minor injuriesClosedBell 47G-2 · Oxnard, CANTSB FTW71DPG02Accident · No injuriesClosedBell 47G-2 · Norfork, ARNTSB FTW71AF004Accident · Minor injuriesClosedBell 47G-4A · Leeville, LANTSB MIA71FLA06Accident · No injuriesClosedChampion 7AC · Molino, FLNTSB FTW71FRJ02Accident · No injuriesClosedCessna 188 · Vidalia, LANTSB FTW71FPG03Accident · No injuriesClosedPiper PA-25 · Wynne, ARNTSB FTW71DPG05Accident · No injuriesClosedBoeing E75N1 · Wabash, AR