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 CHI79FEV35Accident · 1 fatalClosedBellanca 8KCAB · Alma, ILNTSB CHI79FEP79Accident · 1 fatalClosedFly-Baby 1-A · Watertown, WINTSB LAX79FUK23Accident · Serious injuriesClosedGrumman G-164A · Roll, AZNTSB LAX79DUG56Accident · Serious injuriesClosedLaister LP-49 · Adelanto, CANTSB LAX79DUK20Accident · Minor injuriesClosedPiper PA-36 · Safford, AZNTSB FTW79FA111Accident · 3 fatalClosedBeech C35 · Ranger, TXNTSB CHI79FEK24Accident · No injuriesClosedHughes 269B · New Knoxville, OHNTSB MKC79FCD45Accident · Minor injuriesClosedPiper J-3 · Madrid, IANTSB MKC79FCD41Accident · Serious injuriesClosedBell 47G-3B · Pierson, IANTSB FTW79DA110Accident · 2 fatalClosedCessna 150 · Houston, TXNTSB NYC79FA104Accident · 1 fatalClosedCessna 172D · Greenwich, CTNTSB LAX79FA086Accident · No injuriesClosedBoeing A75N1 · Castaic, CANTSB DEN79FA065Accident · 1 fatalClosedBell 47G · Deming, NMNTSB CHI79DEP78Accident · Minor injuriesClosedPiper PA-25 · Pound, WINTSB MIA79DKQ34Accident · No injuriesClosedPiper PA-25 · Duck Hill, MSNTSB FTW79FRD53Accident · No injuriesClosedBoeing A75N1 · Cade, LANTSB FTW79DPG83Accident · Minor injuriesClosedGrumman G-164B · Marion, ARNTSB NYC79FA092Accident · 1 fatalClosedBellanca 17-30A · Hanover, PANTSB NYC79FA091Accident · 3 fatalClosedPiper PA-28 · Charlestown, NHNTSB MIA79FKG33Accident · 1 fatalClosedRockwell S2R · Belzoni, MSNTSB MIA79DKQ32Accident · No injuriesClosedCessna A188A · Sidon, MSNTSB FTW79DA105Accident · No injuriesClosedBell 206B · Lagrange, TXNTSB MIA79DLD91Accident · No injuriesClosedCessna 150 · Yeehaw Jct, FLNTSB MIA79DKQ30Accident · Minor injuriesClosedCessa A188B · Crawford, MSNTSB FTW79DRD51Accident · Minor injuriesClosedPiper PA-25 · White Castle, LANTSB NYC79FNE20Accident · 1 fatalClosedPiper PA-25 · Lee, MANTSB MIA79FKQ31Accident · Minor injuriesClosedEmair MA-1 · Canton, MSNTSB IAD79FID31Accident · No injuriesClosedGrumman G-164A · Glouster, VANTSB IAD79FA073Accident · 4 fatalClosedCessna 172N · Pinnacle, NCNTSB LAX79FA074Accident · 1 fatalClosedGrum-Amer AA1-A · Columbia, CANTSB ANC79DA086Accident · Serious injuriesClosedHughes 500C · Alakanuk, AKNTSB MIA79FLA48Accident · No injuriesClosedBell 47D1 · Hahira, GANTSB MIA79FKJ65Accident · No injuriesClosedGrumman G-164 · Ashford, ALNTSB MIA79DLA51Accident · Minor injuriesClosedPiper PA-25 · Nashville, GANTSB MIA79DLA49Accident · Serious injuriesClosedPiper PA-25 · Moultire, GANTSB FTW79DRJ22Accident · No injuriesClosedGrumman G-164B · Monterey, LANTSB MKC79DCD36Accident · No injuriesClosedGrumman G-164 · Masonville, IANTSB MIA79FKG65Accident · Minor injuriesClosedAero Cmndr S2R600 · Narabi, GANTSB MIA79DLA47Accident · Minor injuriesClosedPiper PA-25 · Norman Park, GANTSB SEA79FTA19Accident · No injuriesClosedBell 206B · Absarokee, MTNTSB MIA79DKQ26Accident · Minor injuriesClosedCessna A188B · Nitta Yuma, MSNTSB FTW79DPG79Accident · No injuriesClosedPiper J-3 · Fresno, ARNTSB MIA79FKQ25Accident · No injuriesClosedGrumman G-164A · Sunflower, MSNTSB SEA79FT123Accident · Minor injuriesClosedKaman HH-43F · Hamilton, MTNTSB MIA79FLA46Accident · Serious injuriesClosedBellanca 7GCBC · Ormond Beach, FLNTSB LAX79FVG71Accident · 1 fatalClosedStearman A75N1 · Fair Oaks, CANTSB LAX79FUK10Accident · 1 fatalClosedHiller UH-12E · Somerton, AZNTSB FTW79DQD14Accident · Minor injuriesClosedPiper PA-25 · Coyanosa, TXNTSB FTW79DPG77Accident · No injuriesClosedCessna A188B · Wabbaseka, ARNTSB MKC79DTG14Accident · No injuriesClosedPiper PA-18 · Leeds, ND