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 MIA77FA069Accident · 2 fatalClosedPiper PA-32 · Andros Is, Burkina FasoNTSB NYC77FA071Accident · 1 fatalClosedPiper PA-28 · Ocean City, NJNTSB NYC77FA067Accident · 2 fatalClosedPiper PA-24 · Windham, VTNTSB LAX77FA055Accident · 1 fatalClosedSchweizer SGS126 · Ocotillo Wells, CANTSB MKC77FA029Accident · 4 fatalClosedPiper PA-28 · Walker, MNNTSB MKC77DCJ25Accident · Minor injuriesClosedPiper PA-28 · Gothenburg, NENTSB CHI77FA049Accident · 4 fatalClosedPiper PA-24 · Grafton, WINTSB LAX77FA050Accident · 2 fatalClosedCessna 177RG · Riverside, CANTSB IAD77FA044Accident · 3 fatalClosedBellanca 14-19 · Robinson Creek, KYNTSB MIA77FLA36Accident · 1 fatalClosedBensen B-8-MG · St Augustine, FLNTSB FTW77FA057Accident · 2 fatalClosedBeech S35 · Lamar, ARNTSB FTW77FA056Accident · 4 fatalClosedCessna 310N · Amarillo, TXNTSB MIA77FKT41Accident · Minor injuriesClosedNaval Fcty N3N-3 · Immokalee, FLNTSB LAX77FA042Accident · 4 fatalClosedCessna 172 · Dana Point, CANTSB DEN77FA041Accident · 2 fatalClosedPiper PA-34 · Bigtrails, WYNTSB LAX77FA041Accident · 4 fatalClosedBeech 35 · Huntington Bch, CANTSB IAD77AA038Accident · 4 fatalClosedBeech HS.125 · Mclean, VANTSB OAK77FVG31Accident · 2 fatalClosedAero-Comdr S-2R · Maxwell, CANTSB OAK77FXQ17Accident · 1 fatalClosedPiper PA-28 · Winnemucca, NVNTSB UNK77X0104Accident · 1 fatalClosedPiper PA-28 · Gruver, TXNTSB OAK77DJA09Accident · 5 fatalClosedCessna 310 · Honolulu, HINTSB NYC77FA038Accident · 1 fatalClosedPiper PA-23 · Weathersfield, CTNTSB DEN77FA036Accident · 2 fatalClosedCessna TU206F · Duchesne, UTNTSB SEA77FA027Accident · 3 fatalClosedCessna 182P · Port Orchard, WANTSB MIA77FA050Accident · 2 fatalClosedBeech C24R · Monroe, GANTSB DEN77FA032Accident · 4 fatalClosedAvions Mrcl DA-10 · Denver, CONTSB FTW77FA048Accident · 6 fatalClosedPiper PA-32R · Commerce, TXNTSB CHI77FEV15Accident · No injuriesClosedCessna 177RG · Springfield, ILNTSB LAX77FA031Accident · 4 fatalClosedCessna 172 · Payson, AZNTSB MKC77FA017Accident · 3 fatalClosedCessna T210L · Atkins, IANTSB FTW77FA045Accident · 1 fatalClosedMitsubishi MU-2B · Austin, TXNTSB OAK77FA026Accident · 1 fatalClosedPiper PA-28 · Corralitos, CANTSB NYC77FA037Accident · 2 fatalClosedCessna U206F · Doylestown, PANTSB MIA77FA043Accident · 1 fatalClosedCessna 150F · Ormond Beach, FLNTSB IAD77FA030Accident · 1 fatalClosedBeech 35 · Boones Mill, VANTSB DEN77FQA26Accident · Serious injuriesClosedPiper PA-28 · Las Vegas, NMNTSB MIA77FA040Accident · 2 fatalClosedBeech 35-C33 · Fort Myers, FLNTSB MIA77RA039Accident · 4 fatalClosedCessna 402 · Stirrup, Burkina FasoNTSB MIA77FA042Accident · 2 fatalClosedBeech M35 · Fargo, GANTSB SEA77FA020Accident · 2 fatalClosedPiper PA-24 · Eugene, ORNTSB DEN77FA028Accident · 1 fatalClosedCessna 414 · Farson, WYNTSB IAD77FA025Accident · 1 fatalClosedCessna 150M · Burlington, NCNTSB SEA77FA019Accident · 1 fatalClosedPiper PA-28R · Port Orchard, WANTSB MKC77FA013Accident · 6 fatalClosedPiper PA-31 · Anthony, KSNTSB LAX77FA035Accident · 1 fatalClosedCessna 182H · Tuscon, AZNTSB CHI77FA026Accident · 1 fatalClosedBeech 58 · Necedah, WINTSB DEN77FA022Accident · 2 fatalClosedCessna 172 · Moab, UTNTSB DEN77FA021Accident · 1 fatalClosedBellanca 17-30 · Acomita, NMNTSB SEA77FA012Accident · 3 fatalClosedBeech C35 · Mckenna, WANTSB OAK77FA011Accident · 2 fatalClosedCessna 310 · Fremont, CA