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 SEA78DYP43Accident · No injuriesClosedGrumman G-164B · Ellensburg, WANTSB MKC78DTK29Accident · No injuriesClosedBell 47G · Elk Point, SDNTSB MIA78FKJ78Accident · Serious injuriesClosedBreezy I · Cullman, ALNTSB LAX78FUG44Accident · No injuriesClosedHiller UH-12E · Blythe, CANTSB DEN78FQA45Accident · Serious injuriesClosedCessna 172 · Rio Rancho, NMNTSB MIA78FKQ26Accident · No injuriesClosedGrumman G-164 · Tutwiler, MSNTSB MIA78FA109Accident · Serious injuriesClosedSikorsky S76A · W Palm Beach, FLNTSB LAX78FUJ89Accident · 1 fatalClosedPiper PA-36 · Casa Grande, AZNTSB FTW78FPG69Accident · Serious injuriesClosedGrumman G-164A · Dumas, ARNTSB NYC78FA073Accident · 1 fatalClosedCessna 150 · Southbridge, MANTSB LAX78FUJ87Accident · 1 fatalClosedGrumman G-164A · Buckeye, AZNTSB CHI78DEV45Accident · No injuriesClosedPiper PA-25 · Laprairie, ILNTSB MIA78FKQ25Accident · Minor injuriesClosedWeatherly 201B · Drew, MSNTSB MKC78FCQ33Accident · No injuriesClosedPiper PA-25 · Edson, KSNTSB MIA78DLA46Accident · No injuriesClosedCessna A188B · Moultrie, GANTSB NYC78FHM22Accident · No injuriesClosedGrumman G-164A · Warwick, NYNTSB FTW78PPG68Accident · Minor injuriesClosedGrumman G-164A · Pickens, ARNTSB IAD78FIG14Accident · Serious injuriesClosedPiper J3C · Westport, MDNTSB LAX78DUM32Accident · Serious injuriesClosedGrumman G-164A · Bard, CANTSB IAD78FA084Accident · 1 fatalClosedCessna 172B · Selmer, TNNTSB FTW78FA062Accident · 2 fatalClosedBellanca 8KCAB · Lake Dallas, TXNTSB DEN78FQA44Accident · No injuriesClosedMeyers Thrush · Tucumcari, NMNTSB SEA78DYP44Accident · No injuriesClosedHiller Acft UH-12E · Mesa, WANTSB LAX78FUJ85Accident · 1 fatalClosedMidget Mustng · Flagstaff, AZNTSB CHI78FEC44Accident · No injuriesClosedPiper PA-25 · Cass City, MINTSB SEA78DYA18Accident · No injuriesClosedHiller Acft UH-12E · Adrian, ORNTSB OAK78FVD47Accident · 1 fatalClosedGrumman G-164B · Manteca, CANTSB OAK78DVA60Accident · Minor injuriesClosedPiper PA-25 · Parlier, CANTSB ANC78DAG86Accident · Serious injuriesClosedPiper PA-18 · Talkeetna, AKNTSB MIA78FKJ62Accident · No injuriesClosedPiper PA-25 · Shorter, ALNTSB MIA78DKQ23Accident · Minor injuriesClosedCessna 188B · Doddsville, MSNTSB FTW78FRJ24Accident · 1 fatalClosedAero-Comdr S-2R · Lake Providenc, LANTSB FTW78FPG66Accident · 1 fatalClosedCessna 172L · Durham, ARNTSB NYC78DFJ29Accident · No injuriesClosedGrumman G-164B · Butler, NYNTSB SEA78DYP40Accident · No injuriesClosedCessna 188 · Tilma, IDNTSB MIA78DKQ22Accident · No injuriesClosedPiper PA-25 · Valley Park, MSNTSB MKC79FER75Accident · Minor injuriesClosedPiper PA-22 · Jasper, MNNTSB MIA78FKQ21Accident · No injuriesClosedPiper PA-36 · Leland, MSNTSB MKC78FTK26Accident · No injuriesClosedPiper PA-36 · Fredrick, SDNTSB IAD78FA083Accident · 1 fatalClosedLuscombe 8A · Fairfield, NCNTSB MKC78FCJ28Accident · No injuriesClosedCallair A-9 · Loup City, NENTSB FTW78DPG63Accident · No injuriesClosedGrumman G-164A · Beedeville, ARNTSB MIA78FKQ20Accident · No injuriesClosedBell 47G3B · Fayette, MSNTSB CHI78FEP45Accident · Minor injuriesClosedSnow S2C · Bancroft, WINTSB MKC78FTK25Accident · No injuriesClosedPiper PA-25 · Sisseston, SDNTSB MKC78FA054Accident · 1 fatalClosedCessna 175B · Turtle Lake, NDNTSB FTW78DPG59Accident · No injuriesClosedCallair A-9B · Ashdown, ARNTSB OAK78DVA66Accident · No injuriesClosedRockwell S2R · Raisin City, CANTSB MIA78DKJ57Accident · No injuriesClosedPiper PA-25 · Jay, FLNTSB MKC78DCA38Accident · Minor injuriesClosedHughes 269A · Hannibal, MO