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 MKC71FCJ11Incident · No injuriesClosedPiper PA-25 · Gothenburg, NENTSB MIA71DKG14Accident · No injuriesClosedPiper PA-25 · Ty Ty, GANTSB LAX71FVA12Accident · Serious injuriesClosedGrumman TBM-3E · Arvin, CANTSB DEN71DQG16Accident · No injuriesClosedPiper PA-25 · Clovis, NMNTSB MKC71FCJ09Accident · No injuriesClosedCallair A-9B · Giltner, NENTSB MKC71DDM14Accident · No injuriesClosedBell 47G-2 · Morton, MNNTSB LAX71DUJ19Accident · No injuriesClosedBell 47G · Queen Creek, AZNTSB MIA71AM009Accident · 2 fatalClosedAeronca 7AC · Hampton, GANTSB CHI71AC007Accident · 3 fatalClosedBeech A-35 · Carrolton, KYNTSB MIA71FKQ01Accident · 1 fatalClosedBoeing A75N1 · Clarksdale, MSNTSB MIA71FKG12Accident · No injuriesClosedCessna 188A · Thomson, GANTSB FTW71FQG12Accident · No injuriesClosedPiper PA-25 · Crosbyton, TXNTSB DEN71FX202Accident · 1 fatalClosedPiper PA-18A · Monticello, UTNTSB SEA71FXM05Accident · Serious injuriesClosedCallair A-9 · Grand View, IDNTSB NYC71DFA07Accident · Serious injuriesClosedTaylorcraft BC12-D · Merrill, NYNTSB MIA71DKJ04Accident · Minor injuriesClosedPiper PA-25 · Atmore, ALNTSB MKC71AK004Accident · 1 fatalClosedCessna 170A · Elmo, MONTSB MIA71FKQ02Accident · No injuriesClosedBoeing B75N1 · Nitta Yuma, MSNTSB DEN71DQA03Accident · No injuriesClosedCessna A188 · Raton, NMNTSB DEN71DQA02Accident · No injuriesClosedPiper PA-25 · Raton, NMNTSB LAX71DUJ14Accident · No injuriesClosedPiper PA-25 · Poston, AZNTSB LAX71FUJ08Accident · 1 fatalClosedSnow S2B · Phoenix, AZNTSB FTW71FRG06Accident · 1 fatalClosedAero Comdr A-9B · Raymondville, TXNTSB DEN71DXA03Accident · No injuriesClosedHughes 269B · Buffalo, WYNTSB FTW71DRG07Accident · Minor injuriesClosedGrumman G-164 · Edcouch, TXNTSB NYC71AN008Accident · 1 fatalClosedN American SNJ-4 · Billings, NYNTSB MIA71DLD04Accident · No injuriesClosedCessna 150G · Sarasota, FLNTSB LAX71AL003Accident · 1 fatalClosedSchweizer SGS126 · Romoland, CANTSB IAD71AI006Accident · 2 fatalClosedPiper PA-18 · Clear Spring, MDNTSB SEA71DWG10Accident · No injuriesClosedPiper PA-25 · Genesee, IDNTSB NYC71FHA04Accident · 1 fatalClosedCessna AG188 · Long Pond, PANTSB MKC71DCG07Accident · No injuriesClosedAero Comdr 600S2D · Faucett, MONTSB SEA71FWG05Accident · No injuriesClosedCessna A188 · Sunnyside, WANTSB OAK71FVA04Accident · No injuriesClosedPiper PA-25 · Corcoran, CANTSB MIA71FKG08Accident · 1 fatalClosedPiper PA-25 · Pitts, GANTSB NYC71DFA02Accident · Minor injuriesClosedLuscombe 8F · Hartford, VTNTSB NYC71AN005Accident · 4 fatalClosedPiper PA-28 · Newfield, NJNTSB IAD71FIG03Accident · Minor injuriesClosedPiper PA-22 · Sykesville, MDNTSB ANC71AA003Accident · 2 fatalClosedCessna 150 · Wasilla, AKNTSB FTW71FQG04Accident · 1 fatalClosedPiper PA-25 · Sunny Side, TXNTSB OAK71AP001Accident · 1 fatalClosedCessna 182H · Shaver Lake, CANTSB NYC71DHD33Accident · No injuriesClosedSikorsky S-58 · Salem, NJNTSB FTW71FQG02Accident · 1 fatalClosedCallair A-9 · Littlefield, TXNTSB FTW71DRG03Accident · No injuriesClosedCessna 150 · Poteet, TXNTSB FTW71FPJ03Accident · 1 fatalClosedPiper J3C-65 · Crawford, OKNTSB MIA71DKJ03Accident · Serious injuriesClosedPiper PA-18A · Atmore, ALNTSB FTW71FPG01Accident · Minor injuriesClosedBell 47G · Weiner, ARNTSB LAX71AL001Accident · 4 fatalClosedPiper PA-28 · Cerritos, CANTSB CHI71DBQ01Accident · No injuriesClosedCessna 182 · Marshall, ILNTSB SEA71FDG01Accident · No injuriesClosedPiper PA-25 · Gallatin Gwy, MT