NTSB investigations, 1969
127 cases where the phase of flight was Uncontrolled descent.
Cases per year
| 1964 | 101 |
|---|---|
| 1965 | 119 |
| 1966 | 119 |
| 1967 | 125 |
| 1968 | 142 |
| 1969 | 127 |
| 1970 | 125 |
| 1971 | 136 |
| 1972 | 135 |
| 1973 | 117 |
| 1974 | 103 |
| 1975 | 99 |
| 1976 | 92 |
| 1977 | 118 |
| 1978 | 102 |
| 1979 | 93 |
| 1980 | 85 |
| 1981 | 97 |
| 1982 | 3 |
| 1983 | 5 |
| 1984 | 6 |
| 1985 | 14 |
| 1986 | 5 |
| 1987 | 9 |
| 1989 | 3 |
| 1990 | 6 |
| 1991 | 7 |
| 1992 | 9 |
| 1993 | 6 |
| 1994 | 2 |
| 1995 | 5 |
| 1997 | 2 |
| 1998 | 5 |
| 1999 | 4 |
| 2000 | 7 |
| 2001 | 5 |
| 2002 | 4 |
| 2003 | 3 |
| 2004 | 4 |
| 2005 | 3 |
| 2006 | 4 |
| 2007 | 1 |
| 2008 | 5 |
| 2009 | 1 |
| 2010 | 3 |
| 2011 | 4 |
| 2012 | 2 |
| 2013 | 2 |
| 2015 | 5 |
| 2016 | 1 |
| 2018 | 1 |
| 2019 | 2 |
| 2021 | 1 |
| 2022 | 1 |
| 2024 | 4 |
| 2025 | 2 |
| 2026 | 1 |
Where
Latest cases
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 year(c.\"eventDate\") = 1969
AND 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 year(c."eventDate") = 1969
AND 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 OAK70A0033Accident · 3 fatalClosedBeech B23 · Angels Camp, CANTSB ANC70A0048Accident · 2 fatalClosedPiper PA-12 · Juneau, AKNTSB SEA70A0026Accident · 4 fatalClosedCessna 180 · Conrad, MTNTSB FTW70A0042Accident · 1 fatalClosedBeech A35 · Valley View, TXNTSB MKC70A0033Accident · 2 fatalClosedAlon A-2A · Clear Lake, IANTSB OAK72AP007Accident · 2 fatalClosedNavion B · Etna, CANTSB FTW70F0345Accident · Serious injuriesClosedHughes 269A · Aiken, TXNTSB FTW70F0334Accident · Serious injuriesClosedCessna 150 · Lampasas, TXNTSB FTW70A0039Accident · 4 fatalClosedCessna 172K · Bellville, TXNTSB MIA70A0041Accident · 1 fatalClosedCessna 172G · Hazelhurst, MSNTSB FTW70A0037Accident · 2 fatalClosedCessna 172 · Saginaw, TXNTSB DCA70A0005Accident · 14 fatalClosedFairchild FH227B · Glens Falls, NYNTSB FTW70A0031Accident · 1 fatalClosedCessna 172 · Mena, ARNTSB CHI70A0032Accident · 1 fatalClosedPiper PA-32 · Northlake, ILNTSB MKC70A0027Accident · 2 fatalClosedCessna 150E · Esmond, ILNTSB MKC70A0026Accident · 1 fatalClosedCessna 182 · Elizabethtown, KYNTSB DEN70A0033Accident · 3 fatalClosedCessna P206 · Bryce Canyon, UTNTSB CHI70A0031Accident · 6 fatalClosedPiper PA-32 · Jonestown, KYNTSB CHI70A0029Accident · 1 fatalClosedPiper PA-23 · Charlotte, MINTSB OAK70F 208Accident · Serious injuriesClosedCessna 172 · Sierra City, CANTSB LAX70A0028Accident · 4 fatalClosedBeech M35 · Happy Jack, AZNTSB LAX70A0027Accident · 3 fatalClosedBeech S35 · Bouse, AZNTSB CHI70F0379Accident · No injuriesClosedScheutzow B · Columbia Sta, OHNTSB SEA79FA059Accident · 1 fatalClosedCessna 140 · Lester, WANTSB IAD70A0028Accident · 3 fatalClosedAero Comdr 1121 · Rural Retreat, VANTSB FTW70F0296Accident · No injuriesClosedBell 206A · New Iberia, LANTSB SEA70A0018Accident · 3 fatalClosedCessna 177 · Caldwell, IDNTSB DEN70A0030Accident · 2 fatalClosedBeech V35 · Vaughn, NMNTSB DEN70A0028Accident · 1 fatalClosedNavion G · Hudson, CONTSB DEN70F0150Accident · Serious injuriesClosedBensen B-8M · Aurora, CONTSB MKC70A0019Accident · 2 fatalClosedCessna 172C · Washington, MONTSB OAK70A0026Accident · 2 fatalClosedBeech E33 · Carson City, NVNTSB SEA75AS015Accident · 1 fatalClosedBeech A35-33 · Oakridge, ORNTSB FTW70A0025Accident · 1 fatalClosedPiper PA-28 · Sonora, TXNTSB MKC70A0016Accident · 1 fatalClosedCessna 182A · Duluth, MNNTSB MIA70A0028Accident · 1 fatalClosedPiper PA-28 · Jessup, GANTSB MIA70A0025Accident · 3 fatalClosedBellanca 17-30 · Brooksville, FLNTSB ANC70A0029Accident · 3 fatalClosedCessna 177 · Kodiak, AKNTSB LAX70A0019Accident · 2 fatalClosedMooney M20E · S.Luis Obispo, CANTSB MIA70A0022Accident · 1 fatalClosedNavion A · Williamson, GANTSB OAK70A0023Accident · 2 fatalClosedCessna 182A · Alturas, CANTSB NYC70A0033Accident · 2 fatalClosedCessna 172G · Germantown, NYNTSB CHI70F0290Accident · No injuriesClosedBeech F35 · Freeland, MINTSB OAK70A0018Accident · 1 fatalClosedDehavilland DH104 · San Francisco, CANTSB DEN70A0019Accident · 1 fatalClosedPiper PA-28 · Eads, CONTSB NYC70A0032Accident · 1 fatalClosedPiper PA-28 · Sandisfield, MANTSB MKC70A0008Accident · 3 fatalClosedCessna 172H · Newton, IANTSB MKC70A0007Accident · 1 fatalClosedPiper PA-22 · Loup City, NENTSB MIA70D0220Accident · No injuriesClosedHughes 269A · Lugoff, SCNTSB SEA70A0010Accident · 1 fatalClosedCessna 140 · Newport, OR