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 SEA65A0056Accident · 2 fatalClosedBeechcraft S35 · Mill City, ORNTSB NYC65A0126Accident · 3 fatalClosedBeechcraft D50 · Hollidaysburg, PANTSB FTW65A0104Accident · 3 fatalClosedCessna 120 · Plaquemine, LANTSB SEA65A0051Accident · 1 fatalClosedPiper PA-22 · Anaconda, MTNTSB ANC65A0046Accident · 2 fatalClosedPiper PA-18 · Kotzebue, AKNTSB CHI65A0090Accident · 2 fatalClosedAeronca 7AC · East Troy, WINTSB NYC65A0124Accident · 1 fatalClosedPiper PA-25 · Philipsburg, PANTSB LAX65A0079Accident · 5 fatalClosedBeechcraft 95-55 · Murrieta, CANTSB FTW65A0094Accident · 3 fatalClosedBeechcraft B-55 · Austin, TXNTSB MIA65A0096Accident · 3 fatalClosedPiper PA-22 · Caguas, PRNTSB FTW65A0097Accident · 4 fatalClosedPiper PA-28 · Laredo, TXNTSB MKC65A0055Accident · 4 fatalClosedMooney M-20E · Colby, KSNTSB MIA65A0093Accident · 4 fatalClosedBeechcraft 35-B33 · 8ne Tampa, FLNTSB UNK65X1474Accident · 2 fatalClosedDouglas DC-3 · Waterville, CanadaNTSB FTW65A0088Accident · 2 fatalClosedCessna 182E · Needville, TXNTSB OAK65F0054Accident · 1 fatalClosedPiper PA-28 · Lanai City, HINTSB CHI65A0080Accident · 1 fatalClosedPiper PA-22 · Madison, INNTSB MKC65A0052Accident · 5 fatalClosedBeechcraft C-45H · Kansas City, KSNTSB MIA65A0090Accident · 2 fatalClosedLoockheed L-18 · Miami, FLNTSB NYC65F0073Accident · 6 fatalClosedBeechcraft C-18S · Sonora, TXNTSB LAX65A0073Accident · 1 fatalClosedCessna 150B · Santa Maria, CANTSB OAK65A0055Accident · 4 fatalClosedPiper PA28 · Hayward, CANTSB CHI65A0073Accident · 2 fatalClosedPiper PA-22 · Pontiac, MINTSB DEN65A0055Accident · 2 fatalClosedBeechcraft 35 · Carefree, AZNTSB UNK65X1383Accident · Serious injuriesClosedLuscombe 8A · Ketchikan, AKNTSB CHI65A0071Accident · 3 fatalClosedPiper PA28 · El Paso, ILNTSB OAK65A0053Accident · 1 fatalClosedPiper PA-11 · Inverness, CANTSB SEA65A0041Accident · 2 fatalClosedCessna 182 · Unity, ORNTSB MIA65A0077Accident · 3 fatalClosedCessna 150 · Americus, GANTSB FTW65A0077Accident · Serious injuriesClosedHughes 269A · Oklahoma Cty, OKNTSB DEN65A0052Accident · 1 fatalClosedMooney M-20 · Estcliffe, CONTSB DEN65A0051Accident · 3 fatalClosedPiper PA22 · Bernardo, NMNTSB FTW65A0075Accident · 3 fatalClosedCessna 182 · Pampa, TXNTSB UNK65X1297Accident · 7 fatalClosedBoeing KC-135 · Ichita, KSNTSB MKC65A0047Accident · 2 fatalClosedCessna 310G · Nebraska Cty, NENTSB OAK65A0050Accident · 1 fatalClosedCessna 150 · Caruthers, CANTSB LAX65F0004Accident · Serious injuriesClosedTaylorcraft DC-65 · Goldhill, NVNTSB FTW65A0067Accident · 3 fatalClosedCessna 182B · Kla City, OKNTSB MIA65A0071Accident · 4 fatalClosedPiper PA24 · Aripeka, FLNTSB MKC65A0045Accident · 2 fatalClosedCessna 172F · Wellington, KSNTSB MIA65A0070Accident · 1 fatalClosedStinson 108-3 · Bunnell, FLNTSB LAX65A0058Accident · 2 fatalClosedBeechcraft T34A · Wrightwood, CANTSB UNK65X1193Accident · 5 fatalClosedPiper PA-22 · Pelham, TNNTSB UNK65X1189Accident · 4 fatalClosedCurtis-Writ C-46A · Detroit, MINTSB UNK65X1164Accident · 5 fatalClosedCessna 182G · Boulder Creek, CANTSB UNK65X1163Accident · 1 fatalClosedCessna 150C · Tallahassee, FLNTSB UNK65X1122Accident · 2 fatalClosedPiper PA-24 · Philip, SDNTSB UNK65X1108Accident · 3 fatalClosedPiper PA-22 · Salem, ORNTSB UNK65X1105Accident · 1 fatalClosedPiper PA-22 · Winona, MNNTSB UNK65X1093Accident · 3 fatalClosedBeechcraft 95-B55 · Good Thunder, MN