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 OAK78FA005Accident · 4 fatalClosedBeech E35 · Willows, CANTSB CHI788A011Accident · 5 fatalClosedBeech P35 · New Salem, INNTSB SEA78FA008Accident · 4 fatalClosedCessna 172M · Newport, WANTSB DEN78FA007Accident · 2 fatalClosedStinson 108-2 · Hope, NMNTSB FTW78FPG05Accident · No injuriesClosedPiper PA-24 · Booneville, ARNTSB SEA78FA007Accident · 1 fatalClosedPiper PA-28 · Gales Creek, ORNTSB OAK78FA004Accident · 4 fatalClosedCessna 172K · Willits, CANTSB OAK78FA003Accident · 2 fatalClosedPiper PA-28R · Las Vegas, NVNTSB CHI78FA006Accident · 2 fatalClosedCessna 150G · Columbus, OHNTSB NYC78FHM01Accident · No injuriesClosedHughes 369D · Monmouth, NJNTSB MKC78FA005Accident · 1 fatalClosedPiper PA-28 · Lamar, MONTSB MKC78FA004Accident · 4 fatalClosedPiper PA-28 · Blair, NENTSB MKC78FA003Accident · 1 fatalClosedAmer Avco AA-1B · St Louis, MONTSB MKC78FA002Accident · 2 fatalClosedGrumann AA-5A · Pierce, NENTSB FTW78FA006Accident · 2 fatalClosedPiper PA-30 · Wetumka, OKNTSB IAD78FA005Accident · 3 fatalClosedBeech D35 · Livingston, KYNTSB MKC78FA001Accident · 2 fatalClosedNavion A · Caldwell, KSNTSB DEN78FA003Accident · 2 fatalClosedMooney M20C · Sheridan, WYNTSB DEN78FA002Accident · 7 fatalClosedPiper PA-32 · Cedar Fort, UTNTSB OAK77FA059Accident · 2 fatalClosedCessna 172N · Pahala, HINTSB MIA77FA090Accident · 1 fatalClosedCessna 150 · Water Valley, MSNTSB CHI77FEC48Accident · 1 fatalClosedPiper PA-28 · Romeo, MINTSB LAX77DUG63Accident · Serious injuriesClosedAero Comdr 600S2R · Blythe, CANTSB IAD77DKM33Accident · Minor injuriesClosedCessna 120 · Bryson City, NCNTSB CHI77FA073Accident · 2 fatalClosedBeech C90 · Pontiac, ILNTSB LAX77FA064Accident · 1 fatalClosedCessna T210L · Carlsbad, CANTSB OAK77FA054Accident · 2 fatalClosedCessna 177 · Soda Springs, CANTSB MIA77FA088Accident · 4 fatalClosedCessna 172 · Lauderhill, FLNTSB MKC77FA039Accident · 2 fatalClosedCessna 177 · Coldwater, KSNTSB MIA77FA087Accident · 2 fatalClosedPiper PA-28 · Jackson, MSNTSB FTW77FA074Accident · 3 fatalClosedBeech V35A · Idabel, OKNTSB IAD77FA064Accident · 2 fatalClosedPiper PA-28 · Harriman, TNNTSB MIA77FA083Accident · 2 fatalClosedPiper PA-28 · Lodge, SCNTSB MKC77FA037Accident · 3 fatalClosedPiper PA-28 · Eagle Butte, SDNTSB CHI77FEX49Accident · Minor injuriesClosedMidget Mustng · Clinton, INNTSB CHI77FEI42Accident · 1 fatalClosedFalck Spec · Cleveland, OHNTSB MKC77FA036Accident · 1 fatalClosedCessna 172M · Henning, MNNTSB FTW77FA072Accident · 3 fatalClosedPiper PA-24 · Canyon, TXNTSB DEN77FA055Accident · 2 fatalClosedBeech C-23 · Miami, NMNTSB NYC77FA087Accident · 1 fatalClosedPiper PA-24 · New Lebanon, NYNTSB SEA77FA049Accident · 4 fatalClosedCessna 185 · Hansville, WANTSB OAK77FA049Accident · 4 fatalClosedPiper PA-28 · Los Banos, CANTSB FTW77FA071Accident · 1 fatalClosedPiper PA-28R · Healdton, OKNTSB FTW77FA070Accident · 1 fatalClosedBeech V35B · Ida, LANTSB DEN77FA054Accident · 3 fatalClosedCessna 172 · Nsalina, UTNTSB SEA77FA047Accident · 1 fatalClosedAerostar 601P · Burns, ORNTSB IAD77FA058Accident · 1 fatalClosedGrum Amer AA1-B · Unity, MDNTSB CHI77FA064Accident · 4 fatalClosedPiper PA-28R · De Witt, ILNTSB MIA77FA072Accident · 3 fatalClosedPiper PA-32 · Clanton, ALNTSB MIA77FA071Accident · 5 fatalClosedCessna 172L · Vienna, GA