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 OAK73AP032Accident · 2 fatalClosedChampion 7GCBC · Furnace Crk, CANTSB LAX73DUJ70Accident · Minor injuriesClosedErco 415-D · Catalina, AZNTSB CHI73AC080Accident · 2 fatalClosedPiper PA-31 · Niles, MINTSB OAK73DJY20Accident · Serious injuriesClosedBell 204B · Ban Na, LaosNTSB FTW73FRG63Accident · Minor injuriesClosedCessna 180 · Wimberly, TXNTSB CHI73AEA30Accident · Minor injuriesClosedCessna 172M · Lafayette, INNTSB NYC73AN126Accident · 3 fatalClosedPiper PA-28 · Valkaria, FLNTSB MIA73DLD67Accident · Serious injuriesClosedCessna 150 · Silver Spring, FLNTSB MIA73RM094Accident · 1 fatalClosedBeech E18S · Grn Trtl C, Burkina FasoNTSB MIA73DLD66Accident · No injuriesClosedCessna 175 · Ocala, FLNTSB LAX73FUA37Accident · Minor injuriesClosedPiper PA-28 · Capistrano, CANTSB LAX73DUJ63Accident · No injuriesClosedMooney MK-20 · Grand Canyn, AZNTSB NYC73FHM23Accident · No injuriesClosedPiper PA-24 · Carlstadt, NJNTSB SEA73DYC23Accident · No injuriesClosedCallair A-9B · Helix, ORNTSB NYC73FHD29Accident · No injuriesClosedCessna 150 · Bristol, PANTSB NYC73DNC61Accident · No injuriesClosedCessna 182N · Montpelier, VTNTSB LAX73FUA35Accident · No injuriesClosedCessna 150L · Carson, CANTSB IAD73AI004Accident · 1 fatalClosedPiper PA-28 · Oneonta, ALNTSB NYC73FFJ19Accident · Serious injuriesClosedCamair 480 · Dunkirk, NYNTSB MIA73FLD63Accident · 1 fatalClosedPiper PA-28 · Orlando, FLNTSB LAX73FUJ59Accident · Minor injuriesClosedCessna U206F · Sedona, AZNTSB FTW73AF052Accident · 3 fatalClosedAero Comdr 680 · Oklahoma Cty, OKNTSB DEN73FTC21Accident · Minor injuriesClosedPiper PA-18A · Bosler, WYNTSB CHI73DET18Accident · No injuriesClosedBeech A23 · Griffith, INNTSB MIA73DKT74Accident · No injuriesClosedPiper PA-30 · Opa Locka, FLNTSB LAX73DUJ64Accident · No injuriesClosedCessna 177 · Tucson, AZNTSB MIA73DKG59Accident · No injuriesClosedPiper PA-28 · Pelham, GANTSB LAX73FUM25Accident · No injuriesClosedSportavia SFS-31 · Serra Mesa, CANTSB LAX73FUJ57Accident · No injuriesClosedAmer Avco AA-1 · Rimrock, AZNTSB DEN73FQD19Accident · Minor injuriesClosedPiper PA-25 · Mesquite, NMNTSB MIA73AM091Accident · 2 fatalClosedLuscombe 8A · Greensboro, ALNTSB LAX73DUM73Accident · No injuriesClosedCessna 150 · Santee, CANTSB NYC73FNE24Accident · Serious injuriesClosedCessna TP206 · Greenwich, CTNTSB NYC73AN122Accident · 2 fatalClosedBeech 65-A90 · Portland, MENTSB MIA73FKJ45Accident · No injuriesClosedBeech A23-19 · Opelika, ALNTSB OAK73DVG51Accident · No injuriesClosedCessna 150 · Red Bluff, CANTSB FTW73DRJ27Accident · Serious injuriesClosedBeech 35-C33 · Mineola, TXNTSB NYC73FNE23Accident · Minor injuriesClosedCessna 172L · Plainville, CTNTSB FTW73FPG40Accident · Serious injuriesClosedCessna 150F · Conway, ARNTSB NYC73AN121Accident · 1 fatalClosedPiper PA-28 · Martinsburg, PANTSB MIA73AM089Accident · 1 fatalClosedCessna 310G · College Park, GANTSB FTW73DRJ26Accident · No injuriesClosedPiper J3C-85 · Glenmora, LANTSB NYC73AN120Accident · 3 fatalClosedPiper PA-28 · Falls Creek, PANTSB IAD73DIJ21Accident · Serious injuriesClosedSchweizer SGS233 · Huntington, WVNTSB UNK73X0107Accident · Serious injuriesClosedBeech 95-B55 · Barranquilla, ColombiaNTSB LAX73DUJ60Accident · Minor injuriesClosedAmer Avco AA-5 · Marana, AZNTSB CHI73FCA03Accident · 1 fatalClosedRobertson T210L · Bethalto, ILNTSB NYC73FHM22Accident · No injuriesClosedCessna 150L · Lincoln Park, NJNTSB MKC73FCD49Accident · Serious injuriesClosedPiper PA-30 · Sioux City, IANTSB ANC73AA042Accident · No injuriesClosedDehavilland DHC-2 · Sitka, AK