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 SEA79FYA18Accident · 1 fatalClosedCessna 188 · Aberdeen, IDNTSB FTW79FRA34Accident · No injuriesClosedBell 47G-4 · Manvel, TXNTSB FTW79FQG46Accident · No injuriesClosedSnow 600S2R · Olton, TXNTSB FTW79FQG45Accident · Serious injuriesClosedMartin 404 · Miami, TXNTSB MKC79FER51Accident · Serious injuriesClosedCessna A188B · Donaldson, MNNTSB MKC79FCD24Accident · No injuriesClosedHughes 269B · Wellman, IANTSB MIA79FKJ46Accident · No injuriesClosedPiper PA-25 · Opp, ALNTSB MIA79DKG52Accident · No injuriesClosedGrumman G-164 · Fitzgerald, GANTSB OAK79DXQ21Accident · Minor injuriesClosedPiper PA-36 · Yerington, NVNTSB FTW79DPG57Accident · No injuriesClosedGruman G-164 · Bono, ARNTSB MKC79DCJ24Accident · No injuriesClosedCessna 177B · Haigler, NENTSB FTW79DRD43Accident · No injuriesClosedGrumman G-164A · Kinder, LANTSB DEN79FTE53Accident · Minor injuriesClosedPiper PA-25 · Center, CONTSB MKC79DCQ32Accident · Minor injuriesClosedPiper PA-18 · Great Bend, KSNTSB IAD79DLT05Accident · No injuriesClosedPiper PA-25 · Covington, TNNTSB OAK79DVA44Accident · No injuriesClosedBell 47G-2 · Kerman, CANTSB NYC79FGT17Accident · Minor injuriesClosedBell 47D-1 · Hanover, PANTSB LAX79DVA43Accident · No injuriesClosedGrumman G-164B · Buttonwillow, CANTSB MIA79FKG49Accident · 1 fatalClosedPiper PA-25 · Wrightsville, GANTSB MKC79FA036Accident · 1 fatalClosedGrumman AA-1B · Clearwater, MNNTSB MKC79DCQ30Accident · No injuriesClosedGrumman G-164A · Moscow, KSNTSB MIA79FLT06Accident · 1 fatalClosedPitts S1-C · Southaven, MSNTSB DEN79FTC17Accident · No injuriesClosedCessna 182 · Wamsutter, WYNTSB MIA79FA097Accident · 2 fatalClosedCessna 150L · Meridian, MSNTSB OAK79DVG53Accident · No injuriesClosedBell OH-13H · Napa, CANTSB NYC79FHD16Accident · Minor injuriesClosedCessna A188B · Cedarville, NJNTSB NYC79FNC30Accident · Minor injuriesClosedCessna 140 · Burlington, VTNTSB DEN79DTE45Accident · No injuriesClosedPiper PA-25 · Two Buttes, CONTSB FTW79FRG41Accident · 1 fatalClosedAir Tractor AT-301 · Elsa, TXNTSB FTW79FPG53Accident · No injuriesClosedCessna 172 · Redfield, ARNTSB FTW79FPG50Accident · No injuriesClosedNa Rockwell S2R · Marked Tree, ARNTSB FTW79DPG48Accident · No injuriesClosedGrumman G-164A · Piggout, ARNTSB FTW79DPD22Accident · No injuriesClosedPitts S-1 · Roanoke, TXNTSB SEA79FTI18Accident · No injuriesClosedCessna 188 · Toston, MTNTSB OAK79DVA41Accident · No injuriesClosedRockwell S2R · Firebaugh, CANTSB MKC79FCA17Accident · Serious injuriesClosedGrumman G-164A · Bell City, MONTSB FTW79FPG47Accident · No injuriesClosedPiper PA-22 · Caulksville, ARNTSB DEN79DQ604Accident · No injuriesClosedBeech A23-19 · Clovis, NMNTSB CHI79FEI27Accident · Minor injuriesClosedPiper PA-25 · Sycamore, OHNTSB MKC79DER46Accident · Minor injuriesClosedCessna 175 · Fosston, MNNTSB MIA79FKQ12Accident · No injuriesClosedCessna 188 · Bentonia, MSNTSB MIA79FKJ42Accident · Serious injuriesClosedHiller UH-12E · Verbena, ALNTSB LAX79DVA42Accident · Minor injuriesClosedHiller UH-12E · Porterville, CANTSB MKC79FTK17Accident · No injuriesClosedHughes 269B · Canistota, SDNTSB OAK79DVA45Accident · Minor injuriesClosedCessna 188B · Hanford, CANTSB IAD79FID19Accident · No injuriesClosedChampion 7GCAA · Pungo, VANTSB IAD79FA055Accident · 2 fatalClosedBell 47G3B1 · Washington, DCNTSB OAK79DVA39Accident · No injuriesClosedBoeing A75 · Hanford, CANTSB MKC79FCG48Accident · Serious injuriesClosedGrumman G-164B · Norborne, MONTSB FTW79DRD39Accident · No injuriesClosedGrumman G-164A · Pine Island, LA