NTSB investigations
2,192 cases where the phase of flight was Uncontrolled descent.
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 = 650)
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 = 650)
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 FTW79FA068Accident · 3 fatalClosedPiper PA-28 · Bayside, TXNTSB MIA79FKG30Accident · Serious injuriesClosedDehavilland DHC-1 · Fayetteville, GANTSB CHI79AA041Accident · 6 fatalClosedBeech 58TC · St.Anne, ILNTSB MIA79FLD55Accident · 1 fatalClosedSchleicher ASW-17 · Oviedo, FLNTSB MIA79FA066Accident · 3 fatalClosedBeech 35A33 · St Petersburg, FLNTSB SEA79FA030Accident · 1 fatalClosedCessna 175A · Paris, IDNTSB DCA79AA016Accident · Minor injuriesClosedBoeing 727-31 · Saginaw, MINTSB NYC79FA033Accident · 2 fatalClosedPiper PA-28 · Allaire, NJNTSB SEA79FA028Accident · 2 fatalClosedPiper PA-28 · Brothers, ORNTSB LAX79FA036Accident · 4 fatalClosedBeech A36 · Perris, CANTSB DEN79FA031Accident · 2 fatalClosedCessna 310 · Castle Rock, CONTSB LAX79FA046Accident · 2 fatalClosedCessna 310R · Heber, AZNTSB FTW79FA062Accident · 1 fatalClosedCessna R172K · Uvalde, TXNTSB MKC79FTG04Accident · Serious injuriesClosedPiper PA-18 · Goodrich, NDNTSB FTW79FRG21Accident · 2 fatalClosedVarieze 1 · Austin, TXNTSB DEN79AA028Accident · 4 fatalClosedRockwell 114 · Fairfield, UTNTSB DEN79FA027Accident · 2 fatalClosedCessna 210 · Limon, CONTSB FTW79FA056Accident · 1 fatalClosedCessna 182P · Weston, TXNTSB MIA79FA053Accident · 2 fatalClosedPiper PA-23 · St Petersburg, FLNTSB IAD79FA035Accident · 4 fatalClosedPiper PA-32R · Glenville, KYNTSB OAK79FA019Accident · 2 fatalClosedCessna 182Q · Tuolumne, CANTSB OAK79FA018Accident · 2 fatalClosedPiper PA-28R · Fernley, NVNTSB FTW79FA049Accident · 1 fatalClosedPiper PA-28 · Comanche, TXNTSB FTW79FA048Accident · 2 fatalClosedAerostar 601P · New Braunfels, TXNTSB DEN79FA020Accident · 1 fatalClosedCessna R172K · Banner, WYNTSB ANC79FA035Accident · 2 fatalClosedMaule M-4 · Eureka Lodge, AKNTSB LAX79FA026Accident · 1 fatalClosedCessna T210L · Long Beach, CANTSB LAX79FUG14Accident · 1 fatalClosedHeffron KR-2 · Corona, CANTSB CHI79FA023Accident · 2 fatalClosedPiper PA-28R · Memphis, INNTSB LAX79FA025Accident · 4 fatalClosedCessna 175 · Wickenburg, AZNTSB MKC79FA014Accident · 1 fatalClosedCessna 210L · Junction City, KSNTSB FTW79FA039Accident · 1 fatalClosedBeech 95-B55 · Fayetteville, ARNTSB MIA79FA032Accident · 2 fatalClosedBeech E33 · Arcadia, FLNTSB LAX79FA022Accident · 4 fatalClosedPiper PA-24 · Springerville, AZNTSB FTW79FA029Accident · 4 fatalClosedCessna 172N · Ada, OKNTSB MKC79FA012Accident · 3 fatalClosedPiper PA-32 · Virginia, NENTSB FTW79FRG09Accident · Serious injuriesClosedBell 47G-2 · Premont, TXNTSB FTW79FA022Accident · 1 fatalClosedPiper PA-28 · Hempstead, TXNTSB SEA79FYP04Accident · 1 fatalClosedCessna R172K · Dayton, WANTSB MIA79FA024Accident · 1 fatalClosedGrumman AA-5B · Marianna, FLNTSB MIA79FA023Accident · 1 fatalClosedSikorsky S55B · Hanceville, ALNTSB MKC79FA006Accident · 4 fatalClosedCessna 182C · Eureka, MONTSB MIA79FA015Accident · 3 fatalClosedCessna 172N · Ormond Beach, FLNTSB FTW79FA015Accident · 1 fatalClosedBeech H18 · Brownsville, TXNTSB SEA79FA014Accident · 2 fatalClosedBellanca 17-30 · Medford, ORNTSB LAX79FA014Accident · 2 fatalClosedGrum Amer AA1-G · Kernville, CANTSB FTW79FA011Accident · 2 fatalClosedBell 206B · Sabine Pass, TXNTSB OAK79FA010Accident · 1 fatalClosedCessna 182A · Reno, NVNTSB SEA79FA012Accident · 1 fatalClosedCessna 177B · Kimberly, ORNTSB IAD79FA010Accident · 4 fatalClosedPiper PA-32 · Melfa, VA