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 LAX70FUGU9Accident · Serious injuriesClosedBensen B8-M · Hemet, CANTSB CHI70FDW23Accident · No injuriesClosedBell 47-J2 · Union Lake, MINTSB MKC70AK071Accident · 1 fatalClosedCessna 182G · Oelwein, IANTSB IAD70AI062Accident · 1 fatalClosedPiper PA-28 · Rose Hill, NCNTSB LAX70FUQ38Accident · Minor injuriesClosedLuscombe T-8F · Las Cruces, CANTSB CHI70FBD24Accident · No injuriesClosedRolladen LS-1B · Plainfield, ILNTSB MIA70AM094Accident · 1 fatalClosedPiper PA-28 · Palm Beach, FLNTSB MKC70AK067Accident · 3 fatalClosedPiper PA-28 · Newton, IANTSB CHI70AC082Accident · 3 fatalClosedNavion A · Evansville, WINTSB SEA70DVQ06Accident · Minor injuriesClosedAeronca 7BCM · Ashland, ORNTSB IAD70AI060Accident · 1 fatalClosedGlobe GC-1B · Blue Ridge, VANTSB FTW70AF072Accident · 3 fatalClosedMooney M20C · Dime Box, TXNTSB LAX70AL069Accident · 3 fatalClosedCessna 182H · Young, AZNTSB CHI70AC075Accident · 2 fatalClosedCessna 150J · Fond Du Lac, WINTSB CHI70AC074Accident · 2 fatalClosedCessna 336 · Chicago, ILNTSB OAK70AP053Accident · 3 fatalClosedCessna 310 · Beatty, NVNTSB NYC70AN116Accident · 3 fatalClosedPiper PA-32 · Stoughton, MANTSB MKC70AK058Accident · 2 fatalClosedMooney M20E · Winner, SDNTSB CHI70AC072Accident · 4 fatalClosedPiper PA-28 · Fowler, MINTSB OAK70AP052Accident · 3 fatalClosedCessna 172 · Mammoth Lakes, CANTSB OAK70AP051Accident · 1 fatalClosedBellanca 17-30 · San Rafael, CANTSB NYC70AN113Accident · 1 fatalClosedChampion 7ECA · Ashford, NYNTSB FTW70AF065Accident · 2 fatalClosedCessna 182L · Flatonia, TXNTSB MKC70AK056Accident · 2 fatalClosedMooney M20C · Rosholt, SDNTSB FTW70FQD10Accident · No injuriesClosedHughes 269B · Pecos, TXNTSB MKC70AK052Accident · 1 fatalClosedCessna 340 · Kingman, KSNTSB MIA70AM080Accident · 1 fatalClosedCessna 172H · St Petersburg, FLNTSB MIA70AM079Accident · 1 fatalClosedPiper PA-28 · Ellenton, FLNTSB FTW70DPG13Accident · No injuriesClosedSchieb L-SPTZ · Mena, ARNTSB MKC70FCG18Accident · Serious injuriesClosedCessna 150D · Drexel, MONTSB FTW70AF062Accident · 2 fatalClosedBellanca 17-30 · Leander, TXNTSB LAX70AL061Accident · 6 fatalClosedPiper PA-32 · Colrado Cty, AZNTSB DEN70FXT07Accident · Serious injuriesClosedBrantly B-2 · Murray, UTNTSB FTW70FPA10Accident · Serious injuriesClosedL T V Elect L-450F · Greenville, TXNTSB CHI70AC065Accident · 1 fatalClosedPiper PA-28R · Vienna, OHNTSB LAX70AL060Accident · 2 fatalClosedAmer Avco AA-1 · Mt Baldy, CANTSB OAK70AP046Accident · 2 fatalClosedCessna 172 · Angwin, CANTSB LAX70AL056Accident · 3 fatalClosedPiper PA-28 · Keene, CANTSB FTW70AF055Accident · 5 fatalClosedPiper PA-32 · St Augustine, FLNTSB LAX70AL055Accident · 1 fatalClosedCessna 172 · Douglas, AZNTSB LAX70AL052Accident · 4 fatalClosedPiper PA-28 · Summit, CANTSB NYC70AN094Accident · 2 fatalClosedBell 206A · Floral Park, NYNTSB MKC70AK047Accident · 4 fatalClosedCessna 182H · Mountain Grove, MONTSB CHI70FBA10Accident · Minor injuriesClosedFulton EAA · Perrysville, INNTSB MIA70AM069Accident · 6 fatalClosedCessna 310P · Philadelphia, MSNTSB MIA70AM066Accident · 2 fatalClosedPiper PA-24 · Tellico Plns, TNNTSB SEA70AS030Accident · 2 fatalClosedCessna 182E · Dillon, MTNTSB CHI70FDJ06Accident · Minor injuriesClosedBell 47G-2 · Oshkosh, WINTSB OAK70AP040Accident · 3 fatalClosedCessna 150J · Platina, CANTSB OAK70AP039Accident · 2 fatalClosedNavion A · Kelseyville, CA