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 CHI73FEM73Accident · Serious injuriesClosedAero Comdr A-9B · Walkerville, MINTSB FTW73DPG55Accident · No injuriesClosedGrumman G-164 · Devalls Bluff, ARNTSB MKC73DCJ44Accident · No injuriesClosedPiper J3C-65 · Lodgepole, NENTSB FTW73FRD34Accident · No injuriesClosedGrumman G-164 · Church Point, LANTSB MKC73DER66Accident · No injuriesClosedBell 47G-2 · Brainerd, MNNTSB IAD73AI017Accident · 1 fatalClosedLuscombe 8A · Grafton, WVNTSB MKC73FTG17Accident · No injuriesClosedStearman A75 · Northwood, NDNTSB MKC73FCG44Accident · Minor injuriesClosedCallair A-9 · Phelps, MONTSB OAK73DVM33Accident · Minor injuriesClosedCessna 150 · Pescadero, CANTSB MKC73FCD63Accident · No injuriesClosedPiper PA-25 · Salix, IANTSB FTW73DRG88Accident · No injuriesClosedSnow 600-S2 · Harlingen, TXNTSB FTW73DPJ22Accident · No injuriesClosedPiper PA-25 · Banner, OKNTSB SEA73DYC31Accident · No injuriesClosedCessna 150 · Salem, ORNTSB LAX73DUQ36Accident · Minor injuriesClosedCallair A-9 · New Cuyama, CANTSB SEA73FYG36Accident · Serious injuriesClosedBell Tomcat · Harrington, WANTSB OAK73FXQ33Accident · Minor injuriesClosedNaval Fcty N3N-3 · Lovelock, NVNTSB MIA73DLD85Accident · No injuriesClosedPiper PA-36 · Zellwood, FLNTSB FTW73FRD33Accident · No injuriesClosedGrumman G-164A · Kaplan, LANTSB CHI73AC092Accident · 1 fatalClosedCessna 172L · Crivitz, WINTSB MIA73FKJ61Accident · Serious injuriesClosedCessna 188B · Talladega, ALNTSB MKC73DTG14Accident · No injuriesClosedPiper PA-25 · Kindred, NDNTSB SEA73FTI21Accident · 1 fatalClosedCessna 188 · Rudyard, MTNTSB OAK73FVA57Accident · 1 fatalClosedBoeing A75 · Reedley, CANTSB FTW73FPD37Accident · No injuriesClosedBell 47D1 · Decatur, TXNTSB FTW73DRD29Accident · Minor injuriesClosedBoeing A75 · Iowa, LANTSB CHI73AC090Accident · 2 fatalClosedCessna 150F · Hillsboro, ILNTSB FTW73DPG50Accident · No injuriesClosedGrumman G-164A · Coy, ARNTSB MIA73FKG77Accident · 1 fatalClosedPitts S1C · Athens, GANTSB FTW73DPJ19Accident · No injuriesClosedPiper PA-25 · Tonkawa, OKNTSB SEA73FTI20Accident · No injuriesClosedBell 47G3B1 · Dayton, MTNTSB FTW73FPG47Accident · No injuriesClosedGrumman G-164A · Dewitt, ARNTSB FTW73DPD34Accident · No injuriesClosedHiller Acft UH-12C · Justin, TXNTSB MKC73FCQ30Accident · Serious injuriesClosedPiper PA-25 · Meade, KSNTSB MKC73DCA25Accident · Serious injuriesClosedPiper PA-25 · Hornersville, MONTSB OAK73FVD35Accident · Minor injuriesClosedCallair A-9 · Clements, CANTSB FTW73DQG39Accident · No injuriesClosedBoeing B75N1 · Parnell, TXNTSB OAK73DVM32Accident · Serious injuriesClosedBell 47G-2A · King City, CANTSB MIA73DKJ56Accident · No injuriesClosedPiper PA-25 · Mccullough, ALNTSB FTW73FPA31Accident · 2 fatalClosedPiper PA-25 · Pecan Gap, TXNTSB FTW73DRJ32Accident · No injuriesClosedPiper PA-25 · Mer Rouge, LANTSB MIA73DLA36Accident · No injuriesClosedAero Comdr A-9B · Greensboro, FLNTSB LAX73DUQ34Accident · No injuriesClosedCessna 210 · San Frnando, CANTSB FTW73DRD23Accident · No injuriesClosedBoeing A75 · Lacassine, LANTSB MIA73FKQ27Accident · Serious injuriesClosedAero Comdr A-9 · Flora, MSNTSB MIA73FKJ53Accident · 2 fatalClosedLockheed PV-1 · Union Springs, ALNTSB OAK73FVA52Accident · Serious injuriesClosedCessna 188C · Murray, CANTSB MKC73DCQ28Accident · Minor injuriesClosedCessna 188 · Mccune, KSNTSB SEA73AS030Accident · 1 fatalClosedBeech S35 · Thorp, WANTSB FTW73AF064Accident · 1 fatalClosedHughes 269A · Uvalde, TXNTSB NYC73DHD34Accident · No injuriesClosedEnstrom F-28A · Centr Square, PA