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 NYC77FA015Accident · 1 fatalClosedCessna 150L · Sherburne, VTNTSB SEA77FA006Accident · 1 fatalClosedBellanca 7GCBC · Geyser, MTNTSB IAD77FKW08Accident · Serious injuriesClosedPiper PA-28 · Athens, TNNTSB DEN77DQA05Accident · No injuriesClosedCessna 182 · Farmington, NMNTSB CHI77DEP05Accident · Minor injuriesClosedCessna 140 · Brookfield, WINTSB LAX77DUJ29Accident · Minor injuriesClosedTaylorcraft BC12-D · Laveen, AZNTSB IAD77FKW09Accident · No injuriesClosedPiper PA-28 · Chattanooga, TNNTSB NYC77DFJ06Accident · No injuriesClosedCessna 172 · Binghamton, NYNTSB MIA77FKQ03Accident · Minor injuriesClosedPiper PA-23 · Natchez, MSNTSB OAK77FA005Accident · 2 fatalClosedCessna 310L · Hawthorne, NVNTSB MIA77DLA06Accident · No injuriesClosedPiper PA-24 · Lake City, FLNTSB FTW77DRA05Accident · No injuriesClosedPiper PA-28 · Houston, TXNTSB NYC77FHJ03Accident · No injuriesClosedPiper PA-28 · Mattituck, NYNTSB NYC77DNC10Accident · Minor injuriesClosedCessna 150 · Hampton, NHNTSB FTW77KQG04Accident · Serious injuriesClosedCessna 172 · Petersburg, TXNTSB FTW77DQG05Accident · No injuriesClosedMooney M20C · Amarillo, TXNTSB DEN77FTM08Accident · Minor injuriesClosedCessna 210 · Brigham City, UTNTSB CHI77FEA03Accident · No injuriesClosedPiper PA-32 · Plainville, INNTSB OAK77FVM03Accident · Minor injuriesClosedCessna 150J · San Jose, CANTSB FTW77FRA04Accident · Serious injuriesClosedCessna 150M · Chester, TXNTSB CHI77DEP03Accident · Minor injuriesClosedCessna 172 · Middleton, WINTSB CHI77FEG04Accident · No injuriesClosedPiper PA-28 · Blue Ash, OHNTSB SEA77FYC05Accident · Minor injuriesClosedPiper PA-28 · Mulino, ORNTSB SEA77DYE03Accident · No injuriesClosedCessna 170 · Spanaway, WANTSB FTW77FA011Accident · 1 fatalClosedCessna 150 · Denton, TXNTSB LAX77FUQ06Accident · Serious injuriesClosedChampion 7ECA · Simi Valley, CANTSB SEA77FYC04Accident · No injuriesClosedFunk B85C · Portland, ORNTSB SEA77DYC03Accident · Serious injuriesClosedPiper PA-24 · Oregon City, ORNTSB NYC77FFJ02Accident · No injuriesClosedCessna 172K · Varna, NYNTSB MIA77DLD09Accident · No injuriesClosedGrum Amer AA-1B · Moss Bluff, FLNTSB LAX77FUM05Accident · Minor injuriesClosedBeech 35-33 · San Diego, CANTSB FTW77DRG06Accident · No injuriesClosedCessna 182 · Elmendorf, TXNTSB CHI77FEI04Accident · Minor injuriesClosedGrum Amer AA-5B · Millbury, OHNTSB LAX77DUJ10Accident · No injuriesClosedCessna 172 · Queen Creek, AZNTSB IAD77FIA03Accident · No injuriesClosedGrum Amer AA1-B · Leonardtown, MDNTSB SEA77DYG07Accident · No injuriesClosedTaylorcraft BL-12 · Wilson Creek, WANTSB MIA77DLD10Accident · No injuriesClosedSchweizer SGS126 · Oviedo, FLNTSB FTW77FA009Accident · 1 fatalClosedCessna 177B · Oklahoma City, OKNTSB IAD77FID03Accident · Minor injuriesClosedCessna 401 · Hot Springs, VANTSB CHI77FET02Accident · Serious injuriesClosedErco 415-C · E.Syracuse, INNTSB OAK77FA002Accident · 2 fatalClosedBeech B35 · Lower Lake, CANTSB LAX77FUG05Accident · No injuriesClosedCessna 150 · Riverside, CANTSB LAX77DUQ04Accident · No injuriesClosedCessna 180 · Santa Paula, CANTSB ANC77DAH07Accident · Serious injuriesClosedPiper PA-18 · Tok, AKNTSB OAK77FVG06Accident · Serious injuriesClosedCessna P206 · Redding, CANTSB OAK77DVG05Accident · Minor injuriesClosedPiper PA-18 · Etna, CANTSB IAD77FA008Accident · 4 fatalClosedPiper PA-31 · Hampton, VANTSB IAD77FA007Accident · 1 fatalClosedCessna 182 · Centreville, VANTSB MKC77FCQ03Accident · Serious injuriesClosedCessna 182P · Kinsley, KSNTSB DEN77FTM07Accident · 1 fatalClosedCessna P206B · Nephi, UT