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 MKC72DCQ54Accident · No injuriesClosedPiper PA-25 · Trousdale, KSNTSB MIA72FKH02Accident · Serious injuriesClosedCallair A-9 · Calhoun, GANTSB FTW72DPJ40Accident · Minor injuriesClosedCessna 188 · Arnett, OKNTSB DEN72DTC24Accident · No injuriesClosedPiper PA-24 · Grass Creek, WYNTSB CHI72AC089Accident · 2 fatalClosedCessna A150 · Metamora, MINTSB OAK72FVA72Accident · 1 fatalClosedPitts S-1S · Woodlake, CANTSB NYC72FFA39Accident · Serious injuriesClosedHughes 269B · Saratoga, NYNTSB OAK72FVA71Accident · 1 fatalClosedPitts S-1S · Merced, CANTSB LAX72FUG76Accident · 1 fatalClosedStarduster SA-300 · Perris, CANTSB FTW72DPD42Accident · No injuriesClosedCessna 150G · Ft Worth, TXNTSB FTW72DRJ27Accident · No injuriesClosedGrumman G-164 · Lake Providnce, LANTSB LAX72FUJ98Accident · No injuriesClosedCessna A188B · Surprise, AZNTSB FTW72FRD25Accident · No injuriesClosedGrumman G-164 · Welsh, LANTSB OAK72DXQ28Accident · No injuriesClosedGrumman G-164A · Fallon, NVNTSB LAX72FUG72Accident · Serious injuriesClosedCessna 170B · Lucerne Vly, CANTSB MIA72FLG35Accident · Minor injuriesClosedHughes 269A · Johns Island, SCNTSB OAK72FVG51Accident · 1 fatalClosedBoeing A75N1 · Princeton, CANTSB MIA72FLD62Accident · No injuriesClosedAero Comdr 60052R · Ft.Pierce, FLNTSB SEA72DYG36Accident · No injuriesClosedPiper PA-25 · Odessa, WANTSB FTW72DRA53Accident · Minor injuriesClosedBoeing E75 · Fannett, TXNTSB LAX72FUG70Accident · Minor injuriesClosedCessna 150 · San Jacinto, CANTSB FTW72FRA52Accident · No injuriesClosedGrumman G-164A · Garwood, TXNTSB DEN72FQG38Accident · 1 fatalClosedPiper PA-25 · Clovis, NMNTSB CHI72FEC39Accident · Serious injuriesClosedAeronca 7AC · Morrice, MINTSB DEN72AD047Accident · 1 fatalClosedMooney M-18C · West Point, UTNTSB OAK72DVA67Accident · No injuriesClosedCessna 188 · Madera, CANTSB FTW72FRJ22Accident · Serious injuriesClosedPiper PA-22 · Downsville, LANTSB FTW72FRG72Accident · No injuriesClosedPiper PA-25 · Mccook, TXNTSB FTW72DRG82Accident · No injuriesClosedWeatherly 201A · Brackettville, TXNTSB FTW72AF066Accident · 2 fatalClosedCessna 140A · Etoile, TXNTSB OAK72DJY04Accident · 1 fatalClosedPilatus PC6CH2 · Ban Xieng, LaosNTSB DEN72AD046Accident · 2 fatalClosedHarvard Markiv · Chandler, AZNTSB OAK72FVD38Accident · Minor injuriesClosedHughes 269A · Oakland, CANTSB LAX72DVA60Accident · No injuriesClosedBell 47G · Wasco, CANTSB LAX72FVM28Accident · 1 fatalClosedSnow 600S2C · Paso Robles, CANTSB LAX72DUM25Accident · Serious injuriesClosedBoeing B75 · Brawley, CANTSB OAK72DVM27Accident · No injuriesClosedBoeing E75N1 · Watsonville, CANTSB MIA72AM100Accident · 2 fatalClosedPiper J3C-65 · Sylacauga, ALNTSB MIA72AM099Accident · 1 fatalClosedPiper PA-28 · Repton, ALNTSB LAX72FUM21Accident · No injuriesClosedHughes 269C · Carlsbad, CANTSB LAX72DUG65Accident · No injuriesClosedCessna 188 · Blythe, CANTSB SEA72DYI17Accident · No injuriesClosedHiller Acft FH1100 · Disston, ORNTSB MIA72AM096Accident · 1 fatalClosedBeech V35A · Fort Pierce, FLNTSB OAK72AP034Accident · 1 fatalClosedCessna 150J · Madera, CANTSB FTW72DPG64Accident · Minor injuriesClosedBoeing E75N1 · West Helena, ARNTSB NYC72AN115Accident · 1 fatalClosedCessna 150L · Stevensville, MDNTSB DEN72FTE62Accident · No injuriesClosedPiper PA-25 · Woodrow, CONTSB FTW72FPJ35Accident · 1 fatalClosedPiper PA-25 · Davis, OKNTSB OAK72FXQ24Accident · 1 fatalClosedPitts SC-1 · Carson City, NVNTSB FTW72DQG33Accident · Minor injuriesClosedCessna 188 · Sunray, TX