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 FTW76AF051Accident · 1 fatalClosedPiper PA-28R · Abernathy, TXNTSB OAK76AP034Accident · 1 fatalClosedNavion A · Maxwell, CANTSB MIA76AM053Accident · 5 fatalClosedNavion B · Cross City, FLNTSB CHI76AC040Accident · 2 fatalClosedPiper PA-30 · Monrovia, INNTSB ANC76AA054Accident · 1 fatalClosedBellanca 7GCBC · Bettles, AKNTSB ANC76AA053Accident · 1 fatalClosedBellanca 8GCBC · Fairbanks, AKNTSB SEA76FYE22Accident · Serious injuriesClosedCessna 172 · Lummi Island, WANTSB FTW76AF050Accident · 4 fatalClosedCessna T310Q · Lewisville, TXNTSB MIA76AM049Accident · 3 fatalClosedMooney M20C · Cross City, FLNTSB LAX76AL038Accident · 1 fatalClosedCessna 172E · Corona, CANTSB FTW76AF046Accident · 1 fatalClosedBeech V35A · Davenport, OKNTSB ANC76AA047Accident · 3 fatalClosedCessna 185 · Anchorage, AKNTSB LAX76DUM11Accident · Minor injuriesClosedBensen B8M · San Diego, CANTSB MKC76AK029Accident · 1 fatalClosedCessna 182A · Rush Center, KSNTSB MIA76AM040Accident · 3 fatalClosedPiper PA-28R · Lake Hamilton, FLNTSB NYC76AN047Accident · 1 fatalClosedStinson 108-2 · Bellows Falls, VTNTSB MIA76AM038Accident · 1 fatalClosedTaylorcraft BC12-D · Rockledge, FLNTSB MIA76AM036Accident · 2 fatalClosedTed Smith 600 · Bunnell, FLNTSB LAX76AL030Accident · 2 fatalClosedAlon A-2 · Grapevine, CANTSB FTW76AF039Accident · 1 fatalClosedPiper PA-22 · Edna, TXNTSB OAK76AP022Accident · 2 fatalClosedPiper PA-24 · Santa Rita, CANTSB OAK76AP021Accident · 4 fatalClosedCessna 182 · Vacaville, CANTSB NYC76AN045Accident · 6 fatalClosedPiper PA-23 · Whitehouse Sta, NJNTSB FTW76AF037Accident · 1 fatalClosedPiper PA-17 · Fabens, TXNTSB LAX76AL027Accident · 2 fatalClosedCessna 172 · Rialto, CANTSB FTW76FQG32Accident · 2 fatalClosedN.American P-51D · Carlsbad, TXNTSB FTW76FQG31Accident · 1 fatalClosedN.American P-51D · Carlsbad, TXNTSB SEA76AS020Accident · 2 fatalClosedPiper PA-24 · Woodland, WANTSB SEA76AS018Accident · 2 fatalClosedCessna 182N · Baker, MTNTSB IAD76AI023Accident · 2 fatalClosedPiper PA-28 · Harrisburg, NCNTSB OAK76FP016Accident · 2 fatalClosedPiper PA-28 · Livermore, CANTSB MIA76AM030Accident · 1 fatalClosedPiper PA-28 · Angelus, SCNTSB LAX76AL022Accident · 1 fatalClosedPiper PA-23 · Julian, CANTSB ANC76AA035Accident · 2 fatalClosedPiper PA-20 · Talkeetna, AKNTSB DEN7LAD018Accident · 2 fatalClosedCessna T210L · Trinidad, CONTSB FTW76AF018Accident · 1 fatalClosedBellanca 17-31 · Larto, LANTSB MKC7LAK016Accident · 3 fatalClosedMooney M20F · Fairmont, MNNTSB MIA76AM018Accident · 3 fatalClosedPiper PA-23 · Decatur, MSNTSB CHI76AC013Accident · 6 fatalClosedPiper PA-32 · Chandlerville, ILNTSB ANC76AA021Accident · 2 fatalClosedHiller Acft UH-12E · Painter Creek, AKNTSB IAD76AI007Accident · 2 fatalClosedBeech A35 · Mumford, ALNTSB SEA76DYE07Accident · No injuriesClosedHiller Acft FH1100 · Shelton, WANTSB FTW76FPG14Accident · 1 fatalClosedTaylorcraft BC12-D · Little Rock, ARNTSB OAK76FJA01Accident · Serious injuriesClosedBlanik L-13 · Mokuleia Oahu, HINTSB SEA7KAS006Accident · 2 fatalClosedCessna 195A · Lincoln City, ORNTSB MKC76FTK02Accident · Minor injuriesClosedBell 47-G2A · Keystone, SDNTSB MIA76AM010Accident · 5 fatalClosedCessna 320B · Darien, GANTSB CHI76FEM05Accident · 1 fatalClosedPiper PA-36 · Munger, MINTSB CHI76FEE08Accident · Serious injuriesClosedCessna 182J · Kankakee, ILNTSB FTW76AF031Accident · 2 fatalClosedPiper PA-32 · Bernice, LA