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 LAX76FUA30Accident · 1 fatalClosedCessna 180 · Buena Park, CANTSB LAX76DUJ98Accident · No injuriesClosedPiper PA-28 · Roll, AZNTSB LAX76DUM28Accident · Minor injuriesClosedAero Comdr 112 · San Diego, CANTSB FTW76O0007Accident · No injuriesClosedCessna 206 · Tamaulipas, MexicoNTSB DEN76FTE87Accident · No injuriesClosedBeech 35 · Englewood, CONTSB CHI76FEK25Accident · No injuriesClosedCessna 310 · Columbus, OHNTSB NYC76FHD37Accident · No injuriesClosedBeech D18S · Manahawkin, NJNTSB MIA76FLG45Accident · Minor injuriesClosedPiper PA-30 · Summerton, SCNTSB FTW76FPJ50Accident · Serious injuriesClosedCessna 172 · Hooker, OKNTSB OAK76AP063Accident · No injuriesClosedBeech 36 · Castro Valley, CANTSB MIA76AM101Accident · No injuriesClosedBoeing 727-35 · Miami, FLNTSB OAK76DXQ62Accident · No injuriesClosedCessna 172 · S.Lake Tahoe, CANTSB MKC76FCQ71Accident · Serious injuriesClosedPiper PA-28 · Coffeyville, KSNTSB CHI76FEK23Accident · No injuriesClosedPiper PA-22 · Baltimore, OHNTSB SEA77DYE56Accident · No injuriesClosedCessna 150 · Eastsound, WANTSB OAK76FVG96Accident · No injuriesClosedPiper PA-32 · Vacaville, CANTSB DEN76DQD31Accident · No injuriesClosedCessna 15OJ · Silver City, NMNTSB SEA76FYE50Accident · Minor injuriesClosedCessna 150 · Bellevue, WANTSB NYC76DNC60Accident · Minor injuriesClosedTaylorcraft BC12-D · Warren, VTNTSB FTW76DQG97Accident · No injuriesClosedCessna A188B · Earth, TXNTSB SEA76FTA26Accident · Serious injuriesClosedCessna 150L · Miles City, MTNTSB MKC76FCJ55Accident · No injuriesClosedSchleicher K-7 · Lincoln, NENTSB LAX76FUD11Accident · No injuriesClosedCessna 150 · Compton, CANTSB FTW76FPG87Accident · No injuriesClosedCessna 206 · Fayetteville, ARNTSB DEN77FTM41Accident · Minor injuriesClosedCessna 206P · Lasal Junction, UTNTSB FTW76DRJ34Accident · No injuriesClosedCessna 150M · Oil City, LANTSB CHI76FEP39Accident · Minor injuriesClosedPiper PA-28 · Sturtevant, WINTSB CHI76FEI36Accident · No injuriesClosedSchweizer SGU222 · Belden, OHNTSB MKC76FCG89Accident · Minor injuriesClosedBeech M35 · Grain Valley, MONTSB FTW76FPJ44Accident · Serious injuriesClosedCessna 402B · Elk City, OKNTSB IAD76AI085Accident · 1 fatalClosedGrum Amer AA-5A · Lexington, KYNTSB DEN76FQA56Accident · Minor injuriesClosedCessna 150 · Tucumcari, NMNTSB ANC76AA114Accident · 5 fatalClosedVolpar C18S · Dutch Harbor, AKNTSB IAD76FKM41Accident · Serious injuriesClosedPiper PA-28 · Asheboro, NCNTSB CHI76AC080Accident · 1 fatalClosedMooney M20F · Crestwood, ILNTSB LAX76DUQ47Accident · Serious injuriesClosedRand KR-1 · Lancaster, CANTSB FTW76DPJ42Accident · Minor injuriesClosedBellanca 14-19 · Duncan, OKNTSB CHI76DETE5Accident · No injuriesClosedPiper PA-28 · Griffith, INNTSB IAD76AI084Accident · Serious injuriesClosedPiper PA-22 · Rehoboth Beach, DENTSB NYC76FGM40Accident · Serious injuriesClosedTaylorcraft BC12-D · Somerset, PANTSB MKC76DCQ67Accident · No injuriesClosedErco 415-C · Derby, KSNTSB MKC76DCA36Accident · Serious injuriesClosedBriegleb BG-12B · Painton, MONTSB MKC76AK067Accident · 1 fatalClosedGlasflugel H-201B · Alden, KSNTSB LAX76FUQ45Accident · Serious injuriesClosedPiper PA-32 · Santa Paula, CANTSB NYC76AN111Accident · 1 fatalClosedPiper PA-28R · Bedford, MANTSB NYC76FHJ26Accident · No injuriesClosedCessna 150H · Montauk, NYNTSB MKC76DCJ49Accident · No injuriesClosedCessna 172 · Mccook, NENTSB LAX76FVA77Accident · Serious injuriesClosedPiper PA-32 · Bakersfield, CANTSB FTW76FPJ39Accident · Serious injuriesClosedPiper PA-22 · Randlett, OKNTSB NYC76FGT22Accident · Serious injuriesClosedBellanca 7GCBC · Hanover, PA