NTSB investigations
20,992 cases where the phase of flight was Approach.
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 = 500)
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 = 500)
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 FTW78FA015Accident · 3 fatalClosedCessna 310 · Wharton, TXNTSB FTW78DPA05Accident · No injuriesClosedTaylorcraft BC12-D · Trinidad, TXNTSB CHI78FET04Accident · No injuriesClosedRockwell 112TC · Gary, INNTSB IAD78FLQ05Accident · Minor injuriesClosedPiper PA-28 · Somerset, KYNTSB FTW78FRA09Accident · Serious injuriesClosedPiper PA-28 · Baytown, TXNTSB FTW78DPA06Accident · No injuriesClosedCessna 150 · Plano, TXNTSB CHI78DEE17Accident · Minor injuriesClosedBarnes FFAX6 · Valley View, ILNTSB OAK78DXQ04Accident · No injuriesClosedCessna 182 · Winnemucca, NVNTSB MIA78FLA08Accident · No injuriesClosedCessna 150 · Thomasville, GANTSB IAD78FIJ04Accident · Minor injuriesClosedVarga 2150A · Charleston, WVNTSB NYC78FA011Accident · 1 fatalClosedCessna 206 · Taunton, MANTSB MIA78DLG06Accident · Minor injuriesClosedPiper PA-28 · Sheldon, SCNTSB ANC78DA004Accident · Minor injuriesClosedBell 206-L · Deadhorse, AKNTSB IAD78FA015Accident · 2 fatalClosedBeech 58 · Pinehurst, NCNTSB DEN78DTC06Accident · No injuriesClosedCessna 172 · Pinedale, WYNTSB CHI78DEX03Accident · Serious injuriesClosedBeech 36 · Terre Haute, INNTSB DEN78DTE13Accident · No injuriesClosedPiper PA-28R · Paonia, CONTSB IAD78FIJ07Accident · Serious injuriesClosedRockwell 114 · Parkersburg, WVNTSB DEN78FA008Accident · 1 fatalClosedPiper PA-28 · Carlsbad, NMNTSB MKC78FCA09Accident · Serious injuriesClosedBeech A23-24 · Festus, MONTSB LAX78FUA04Accident · Minor injuriesClosedCessna 177 · Fullerton, CANTSB SEA78DYK02Accident · No injuriesClosedCessna T210 · Redmond, ORNTSB LAX78FUA03Accident · Serious injuriesClosedCessna 150 · Huntington Bch, CANTSB IAD78FA013Accident · 1 fatalClosedCessna 182 · Richmond, VANTSB NYC78FGM10Accident · Serious injuriesClosedGrum Amer AA-5A · Seven Springs, PANTSB NYC78DFJ07Accident · Minor injuriesClosedCessna 150L · Painted Post, NYNTSB NYC78FGM09Accident · Minor injuriesClosedPiper PA-28 · Jeannette, PANTSB OAK78FVD10Accident · Serious injuriesClosedBellanca 7GCBC · Tracy, CANTSB FTW78FQG07Accident · Serious injuriesClosedCessna L-19 · Lubbock, TXNTSB LAX78FA005Accident · 2 fatalClosedBellanca 17-30 · Fullerton, CANTSB SEA78FTA05Accident · No injuriesClosedGrum Amer AA5A · Billings, MTNTSB CHI78FEE08Accident · No injuriesClosedCessna 172K · Wheeling, ILNTSB LAX78FUJ09Accident · No injuriesClosedHelio Acft H-295 · Scottsdale, AZNTSB CHI78FA008Accident · 1 fatalClosedCessna 310P · Eagle River, WINTSB LAX78DUG04Accident · No injuriesClosedSchweizer SGS126 · San Jacinto, CANTSB FTW78FA010Accident · Serious injuriesClosedPiper PA-34 · Tulsa, OKNTSB CHI78FEM03Accident · Serious injuriesClosedCessna 172M · Mt Pleasant, MINTSB CHI78FA007Accident · 1 fatalClosedCessna 310Q · Watertown, WINTSB IAD78DIJ02Accident · Minor injuriesClosedCessna 150 · Summersville, WVNTSB CHI78FEK03Accident · No injuriesClosedPiper PA-31 · Delaware, OHNTSB DEN78FTE10Accident · No injuriesClosedCessna T210J · Glenwood Sprgs, CONTSB MIA78FKA02Accident · No injuriesClosedCurtis-Wrt C-46 · St Thomas, VINTSB CHI78FEP09Accident · Serious injuriesClosedPiper PA-31 · Manitowoc, WINTSB CHI78FEV06Accident · Serious injuriesClosedCessna 172 · Fairfield, ILNTSB IAD78FIG02Accident · No injuriesClosedCessna 210 · Edgewater, MDNTSB DEN78DTE09Accident · No injuriesClosedCessna 150H · Durango, CONTSB DEN78DTE08Accident · Minor injuriesClosedMooney M20F · Colorado Sprgs, CONTSB MIA77FKT86Accident · Minor injuriesClosedGrum Amer AA-1B · Coral Springs, FLNTSB OAK78FYG07Accident · No injuriesClosedPiper PA-28 · Rio Linda, CANTSB NYC78DHJ01Accident · No injuriesClosedPiper PA-28 · Fishers Isl, NY