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 ATL82DLQ04Accident · No injuriesClosedAdams A50S · Nicholasville, KYNTSB FTW82FA026Accident · 2 fatalClosedBeech V35A · Addison, TXNTSB DEN82FA011Accident · 4 fatalClosedBeech 95 · Cedar City, UTNTSB NYC82FHA03Accident · Serious injuriesClosedCessna 150K · Andover, NJNTSB NYC82FGT05Accident · No injuriesClosedPiper PA-24 · Montoursville, PANTSB MKC82DCG12Accident · No injuriesClosedPiper PA-28 · Willow Spgs, MONTSB ATL82FA022Accident · 1 fatalClosedCessna 206 · Pine Mountain, GANTSB NYC82FHM02Accident · No injuriesClosedCessna 152 · Mahopac, NYNTSB NYC82FA012Accident · 1 fatalClosedBeech 35 · Wyoming, DENTSB ATL81FLG03Accident · No injuriesClosedCessna 152 · Hilton Head, SCNTSB LAX82FVG07Accident · Serious injuriesClosedCessna 182H · Sacramento, CANTSB LAX82FA021Accident · 3 fatalClosedBeech J35 · Lake Havasu, AZNTSB MIA82FA014Accident · 1 fatalClosedCessna 172G · St.Petersburg, FLNTSB FTW82DQD03Accident · No injuriesClosedCessna 150 · Las Cruces, NMNTSB MKC82DCA05Accident · No injuriesClosedCessna 172D · Jefferson City, MONTSB ATL82FLQ03Accident · Serious injuriesClosedCessna 206 · Bowling Green, KYNTSB NYC82FHD05Accident · Minor injuriesClosedCessna 177B · Bridgeport, NJNTSB FTW82FPM05Accident · Serious injuriesClosedPiper PA-28 · Tulsa, OKNTSB DEN82FA007Accident · Minor injuriesClosedCessna 402C · Dickinson, NDNTSB ATL82FA018Accident · 1 fatalClosedCessna 425 · Natchez, MSNTSB LAX82FVW02Accident · No injuriesClosedPiper PA-28 · Las Vegas, NVNTSB MIA82FLD07Accident · Minor injuriesClosedPiper PA-22 · Zephyrhills, FLNTSB CHI82FEM04Accident · Serious injuriesClosedCessna 172 · Kinross, MINTSB SEA82DYK04Accident · No injuriesClosedCessna 185F · Burns, ORNTSB NYC82FA009Accident · 4 fatalClosedPiper PA-32 · Mount Pocono, PANTSB CHI82FEE05Accident · No injuriesClosedCessna 172N · Grayslake, ILNTSB ANC82DAG07Accident · Minor injuriesClosedFechtner KR-2 · Anchorage, AKNTSB SEA82FYM04Accident · Serious injuriesClosedPiper PA-22 · Hillsboro, ORNTSB LAX82FUJ07Accident · No injuriesClosedRaven AX-7 · Phoenix, AZNTSB DEN82FTE09Accident · 1 fatalClosedAeronca 7KCAB · Morrison, CONTSB CHI82FEM02Accident · Minor injuriesClosedBeech T-34 · Lansing, MINTSB CHI82FER12Accident · Minor injuriesClosedPiper PA-38 · Blaine, MNNTSB MKC82DCQ04Accident · No injuriesClosedCessna P210N · Fort Scott, KSNTSB CHI82FER10Accident · No injuriesClosedCessna 150 · Crystal, MNNTSB ATL82FKJ04Accident · No injuriesClosedCessna 172M · Selma, ALNTSB ATL82FKQ08Accident · Serious injuriesClosedBeech F33A · Grenada, MSNTSB SEA82FA002Accident · 1 fatalClosedCessna 175B · Springfield, IDNTSB MKC82FCG05Accident · Minor injuriesClosedCessna 150M · Eldon, MONTSB ATL81FA016Accident · 2 fatalClosedPiper PA-28 · Hopkinsville, KYNTSB NYC82DFJ07Accident · No injuriesClosedSpezio DAL-1 · Ceres, NYNTSB DEN82FTE07Accident · No injuriesClosedAerospatial AS350B · Tarryall, CONTSB LAX82DUJ22Accident · No injuriesClosedCessna 150K · Sedona, AZNTSB ATL82FA014Accident · 1 fatalClosedBalzer DSK-1 · Washington, NCNTSB LAX82DVD02Accident · No injuriesClosedWilder OFA-1 · Livermore, CANTSB CHI82DA010Accident · Serious injuriesClosedMooney M20J · Effingham, ILNTSB LAX82FUJ04Accident · No injuriesClosedCessna P210 · Phoenix, AZNTSB NYC82FA006Accident · 3 fatalClosedPiper PA-28 · Farmingdale, NYNTSB FTW82FQG04Accident · Serious injuriesClosedHughes 269C · Guthrie, TXNTSB ATL82FKG03Accident · Minor injuriesClosedCessna 150F · Columbus, GANTSB NYC82FA005Accident · Minor injuriesClosedBeech 36 · Marlborough, NY