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 MIA66A0038Accident · 1 fatalClosedCessba 140 · Trenton, ALNTSB CHI66A0031Accident · 3 fatalClosedCessna 172 · White Cloud, MINTSB DEN66A0023Accident · 1 fatalClosedBell 47G3B1 · Monticello, UTNTSB UNK65X1537Accident · 3 fatalClosedBeechcraft C-45H · Bao Trai, VMNTSB NYC66A0036Accident · 1 fatalClosedPiper PA-23 · Glen Burnie, MDNTSB CHI66A0028Accident · 1 fatalClosedAeronca 7AC · Whitewater, WINTSB MIA66A0030Accident · 1 fatalClosedCessna 172B · Englewood, FLNTSB ANC66AA011Accident · 2 fatalClosedStinson 108-2 · Council, AKNTSB SEA66A0021Accident · 2 fatalClosedNavion B · Judith Gap, MTNTSB OAK66A0009Accident · 1 fatalClosedCessna 172D · Kyburz, CANTSB NYC66A0032Accident · 1 fatalClosedStinson 108-3 · Milroy, PANTSB ANC66A0008Accident · 3 fatalClosedPiper PA-12 · Anchorage, AKNTSB FTW66F0228Accident · Minor injuriesClosedPiper PA-18 · Booker, TXNTSB CHI66A0019Accident · 1 fatalClosedMooney M-20C · Beloit, WINTSB MIA66A0023Accident · 4 fatalClosedCessna 182B · Logtown, MSNTSB ANC66A0005Accident · 2 fatalClosedAeronca 7DC · 40ssw Tok, AKNTSB ANC66A0003Accident · Serious injuriesClosedBell 47J2 · Seldovia, AKNTSB LAX66A0016Accident · 1 fatalClosedLockheed P-38 · Los Olivos, CANTSB OAK66F0091Accident · No injuriesClosedCessna 172 · Concord, CANTSB FTW66A0007Accident · 1 fatalClosedCessna 172 · 2e Chelsea, OKNTSB MIA66A0014Accident · 1 fatalClosedPiper PA-24 · Parrish, ALNTSB NYC66A0026Accident · 2 fatalClosedCessna 310 · Livingstn Manr, NYNTSB CHI66A0009Accident · 1 fatalClosedCessna 150C · Wausau, WINTSB NYC66A0008Accident · 1 fatalClosedPiper PA-23 · Jersey City, NJNTSB NYC66A0003Accident · 1 fatalClosedHughes 269B · Waldorf, MDNTSB LAX66A0003Accident · 2 fatalClosedBeechcraft 23 · Steamboat, NVNTSB DEN66D0108Accident · No injuriesClosedAeronca 7AC · Boulder City, NVNTSB CHI66A0002Accident · 1 fatalClosedPiper PA-16 · Lake Delton, WINTSB CHI66A0003Accident · 2 fatalClosedCessna 210 · Meppen, ILNTSB SEA65A0068Accident · 1 fatalClosedCessna 210 · Opheim, MTNTSB MIA65A0122Accident · 5 fatalClosedBeechcraft 35C · 6nw Bolivia, NCNTSB DEN65A0082Accident · 2 fatalClosedChampion 7ECA · Alcova, WYNTSB DEN65A0081Accident · 1 fatalClosedCessna 150D · Byers, CONTSB NYC66F0005Accident · Serious injuriesClosedPiper PA12 · Weare, NHNTSB MKC65A0074Accident · 4 fatalClosedBeechcraft 35-33 · 10s Maryville, MONTSB MKC65A0073Accident · 2 fatalClosedAeronca 7AC · Winner, SDNTSB NYC65A0144Accident · 1 fatalClosedTaylorcraft BC12D1 · Amherst, NYNTSB LAX65A0093Accident · 9 fatalClosedBeechcraft C-18S · Corona Dl Mar, CANTSB MKC66F0004Accident · Serious injuriesClosedPiper PA-22 · Imperial, NENTSB SEA65A0064Accident · 1 fatalClosedCessna 182C · Forks, WANTSB LAX65A0090Accident · 2 fatalClosedCessna 172D · Etiwanda, CANTSB OAK65A0067Accident · 3 fatalClosedN American Navion · 2ne Colfax, CANTSB MKC66A0011Accident · 1 fatalClosedCessna 140A · Ava, MONTSB MKC65A0066Accident · 2 fatalClosedBeechcraft 35 · Intnl Falls, MNNTSB LAX65A0088Accident · 1 fatalClosedStinson 108-1 · Newport Beach, CANTSB FTW65A0111Accident · 3 fatalClosedCessna 182 · Mabank, TXNTSB CHI65F0143Accident · Serious injuriesClosedNavion NAV-4 · Athens, OHNTSB OAK65A0066Accident · 1 fatalClosedCessna 172 · Lake Tahoe, CANTSB DEN65A0069Accident · 1 fatalClosedCessna 182A · 8s Cheyenne, WYNTSB MKC65A0064Accident · 1 fatalClosedPiper PA-28 · 4sw Holden, MO