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 SEA69F0217Accident · No injuriesClosedBrantly B-2B · Lodge Grass, MTNTSB CHI69F0586Accident · 1 fatalClosedBensen B-8M · Middletown, OHNTSB LAX69A0058Accident · 5 fatalClosedCessna 310N · Upland, CANTSB MKC69F0432Accident · No injuriesClosedHughes 269B · St Paul, MNNTSB LAX69A0059Accident · 2 fatalClosedCessna 177A · Corona, CANTSB FTW69A0072Accident · 1 fatalClosedCessna 150 · Devers, TXNTSB FTW69A0070Accident · 1 fatalClosedCessna 150E · Placedo, TXNTSB FTW69A0069Accident · 2 fatalClosedCessna 310L · De Soto, TXNTSB IAD69A0053Accident · 3 fatalClosedCessna 172 · Emporia, VANTSB FTW69A0067Accident · 5 fatalClosedBeech S35 · Mansfield, LANTSB CHI69F0529Accident · Serious injuriesClosedBell 206A · Springfield, OHNTSB CHI69F0562Accident · Serious injuriesClosedPiper PA-28 · Richfield, OHNTSB MKC69A0051Accident · 1 fatalClosedMooney M20F · Jamestown, NDNTSB LAX69F0293Accident · Serious injuriesClosedBensen B-8M · Litchfld Pk, AZNTSB FTW69A0061Accident · 3 fatalClosedBeech K35 · Spicewood, TXNTSB LAX69F0287Accident · Minor injuriesClosedFlug-Undfah HBV · La Jolla, CANTSB CHI69F0521Accident · Serious injuriesClosedBensen B-8M · Lacon, ILNTSB CHI69A0075Accident · 1 fatalClosedMooney M20E · Jeffersonvlle, INNTSB OAK69A0053Accident · 1 fatalClosedPiper PA-24 · Smartville, CANTSB OAK69A0055Accident · 1 fatalClosedPiper PA-12 · Goldfield, NVNTSB DEN69A0032Accident · 1 fatalClosedCessna 182 · Dunlap, NMNTSB FTW71AF045Accident · 4 fatalClosedBeech 23 · Helena, ARNTSB MIA69A0046Accident · 2 fatalClosedBeech 95 · St.George, GANTSB MKC69A0049Accident · 1 fatalClosedCessna 310C · High Hill, MONTSB ANC69A0040Accident · 1 fatalClosedCessna 180 · Anchorage, AKNTSB DIA69A0039Accident · 1 fatalClosedCessna 150 · Flintstone, MDNTSB OAK69F0230Accident · Minor injuriesClosedBrantly B-2B · Benicia, CANTSB SEA69A0044Accident · 1 fatalClosedPiper PA-24 · Pendleton, ORNTSB ANC69A0038Accident · 2 fatalClosedBell 205A · Tyonek, AKNTSB MIA69F0341Accident · Minor injuriesClosedBell 47G-3B · Kingsport, TNNTSB OAK69A0042Accident · 2 fatalClosedPiper PA-28 · Redding, CANTSB MKC69A0043Accident · 1 fatalClosedHughes 269B · Kansas City, MONTSB MIA69A0038Accident · 6 fatalClosedPiper PA-31 · Jamestown, TNNTSB MKC69O0001Accident · Serious injuriesClosedMooney M20F · Parry, CanadaNTSB MIA69A0037Accident · 4 fatalClosedPiper PA-23 · Melbourne, FLNTSB OAK69A0041Accident · 5 fatalClosedPiper PA-24 · Lodi, CANTSB FTW69A0046Accident · 5 fatalClosedPiper PA-24 · Oakdale, LANTSB OAK69A0040Accident · 1 fatalClosedMooney M20F · Danville, CANTSB MKC69A0039Accident · 5 fatalClosedMitsubishi MU-2B · Springfield, MONTSB MIA69F0290Accident · 1 fatalClosedAero Comdr A-9B · Newton, MSNTSB LAX69A0035Accident · 3 fatalClosedPiper PA-28 · Mt.Laguna, CANTSB LAX69A0033Accident · 1 fatalClosedPiper PA-24 · Glen Avon, CANTSB MKC69A0038Accident · 2 fatalClosedPiper PA-22 · Morris, MNNTSB FTW69F0337Accident · No injuriesClosedHughes 269A · Odonnell, TXNTSB SEA69A0032Accident · 3 fatalClosedAero Comdr 560-F · Wolf Creek, MTNTSB FTW69F0454Accident · Serious injuriesClosedPiper PA-22 · Austin, TXNTSB UNK69X0102Accident · 1 fatalClosedDornier DO-28D · Sonderborg, DANTSB SEA69D0164Accident · Minor injuriesClosedPiper PA-28 · Duvall, WANTSB LAX71AL063Accident · 2 fatalClosedCessna 172E · Banning, CANTSB LAX71AL045Accident · 3 fatalClosedCessna 170B · San Luis Obsp, CA