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 MIA78DLD42Accident · Minor injuriesClosedCessna 172 · Avon Park, FLNTSB UNK78X0118Accident · Minor injuriesClosedDouglas DC-6A · Zandery, NSNTSB LAX78FUA15Accident · No injuriesClosedPiper PA-34 · Fullerton, CANTSB DEN78FA043Accident · 2 fatalClosedBellanca BL-J4 · Carrizozo, NMNTSB ANC78DAG43Accident · Serious injuriesClosedPiper PA-28R · Anchorage, AKNTSB MKC78FCA25Accident · No injuriesClosedCessna R172 · Sikeston, MONTSB DEN78FTE50Accident · Minor injuriesClosedLuscombe 8F · Monte Vista, CONTSB FTW78FRA19Accident · No injuriesClosedGrumman G-164A · Baytown, TXNTSB SEA78FYE21Accident · Minor injuriesClosedCessna 172 · Port Townsend, WANTSB OAK78FVM20Accident · Minor injuriesClosedCessna 210 · San Jose, CANTSB CHI78FEK14Accident · No injuriesClosedTaylorcraft F19 · Ohio City, OHNTSB NYC78FNE20Accident · Minor injuriesClosedBellanca 8KCAB · Simsbury, CTNTSB NYC78FHA21Accident · 1 fatalClosedBensen B8M · Pittstown, NJNTSB NYC78FFJ19Accident · No injuriesClosedCessna 150 · Spencerport, NYNTSB MKC78FA035Accident · 2 fatalClosedVultee BT-13 · Augusta, KSNTSB LAX78FUQ23Accident · 1 fatalClosedMakurat 5-BX · Lompoc, CANTSB SEA78FYE20Accident · 1 fatalClosedBensen G-1D · Tacoma, WANTSB MIA78FKA06Accident · No injuriesClosedPiper PA-31 · Culebra Is, PRNTSB NYC78FFJ17Accident · Serious injuriesClosedSchleicher ASK-14 · West Valley, NYNTSB LAX78FUM21Accident · No injuriesClosedCessna A185F · Ramona, CANTSB CHI78FEE30Accident · No injuriesClosedN American NA265 · West Chicago, ILNTSB SEA78DYE18Accident · No injuriesClosedStinson 108-1 · Bremerton, WANTSB MIA78DLG20Accident · No injuriesClosedMolino PIK20B · York, SCNTSB LAX78FUG23Accident · Minor injuriesClosedN American SNJ-4 · Rialto, CANTSB FTW78FPG26Accident · 1 fatalClosedBensen B8-MG · Carlisle, ARNTSB ANC78FAA12Accident · No injuriesClosedPratt Read PR-G1 · North Pole, AKNTSB NYC78FNE21Accident · No injuriesClosedPiper PA-28 · Orange, MANTSB CHI78FA033Accident · 1 fatalClosedSchleicher ASK-13 · Adrian, MINTSB MIA78DLA29Accident · No injuriesClosedCessna C-150F · Tallahassee, FLNTSB NYC78FGM25Accident · No injuriesClosedEntwicklung B-1 · Butler, PANTSB CHI78FEM15Accident · No injuriesClosedPiper PA-28 · Battle Creek, MINTSB CHI78FEI17Accident · No injuriesClosedCessna 337 · Wadsworth, OHNTSB MIA78FKQ07Accident · Serious injuriesClosedCessna 150L · Hallandale, MSNTSB SEA78FYP16Accident · Serious injuriesClosedCessna 150 · Mccall, IDNTSB NYC78FNA15Accident · No injuriesClosedSchweizer SGS233 · Norfolk, MANTSB MKC78FCG25Accident · No injuriesClosedCessna 182A · Lexington, MONTSB MIA78FA063Accident · 1 fatalClosedPiper PA-28 · St.Petersburg, FLNTSB SEA78FA024Accident · No injuriesClosedLear Jet 24D · Soda Springs, IDNTSB NYC78FA040Accident · 2 fatalClosedPiper PA-30 · Montpelier, VTNTSB MIA78FA062Accident · 2 fatalClosedCessna 172 · Miles City, FLNTSB MIA78FKG35Accident · Minor injuriesClosedCessna 172 · Wrens, GANTSB FTW78FA038Accident · 3 fatalClosedBell 212 · Galveston, TXNTSB OAK78DVD25Accident · Serious injuriesClosedBlanik L13 · Fremont, CANTSB DEN78DTE44Accident · No injuriesClosedCessna 172L · Falcon, CONTSB ANC78FA027Accident · 2 fatalClosedDornier DO-28D · Bethel, AKNTSB MIA78FLG16Accident · Serious injuriesClosedRockwell 114 · Charleston, SCNTSB LAX78DUJ41Accident · No injuriesClosedSchweizer 1-26D · New River, AZNTSB DEN78FTC19Accident · No injuriesClosedBeech D35 · Douglas, WYNTSB NYC78FHD12Accident · Serious injuriesClosedPiper PA-28 · Downingtown, PANTSB MIA78DKG31Accident · No injuriesClosedBeech A23 · Glenwood, GA