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 NYC78FFJ39Accident · No injuriesClosedAero Comdr 112 · Jamestown, NYNTSB MKC78DTG16Accident · No injuriesClosedBellanca 7GCBC · Mandan, NDNTSB IAD78FKM25Accident · 1 fatalClosedBensen B8 · Salisbury, NCNTSB NYC78FA091Accident · 3 fatalClosedAero Comdr 500S · Hammondsport, NYNTSB NYC78FHM29Accident · No injuriesClosedPiper PA-23 · Marlboro, NJNTSB NYC78FFJ38Accident · No injuriesClosedN.American N265 · Elmira, NYNTSB LAX78FUG53Accident · No injuriesClosedCessna 210T · Rialto, CANTSB IAD78FA108Accident · 1 fatalClosedGrum Amer AA-5 · Jackson, TNNTSB FTW78DPG89Accident · No injuriesClosedThorp T-18 · N.Little Rock, ARNTSB ANC79FA076Accident · 3 fatalClosedSoloy 12EJ3 · Wrangell, AKNTSB DEN78FTE99Accident · Serious injuriesClosedSchweizer 2-33A · Black Forest, CONTSB IAD78FIJ19Accident · Minor injuriesClosedMooney M20F · Charleston, WVNTSB FTW78FA077Accident · No injuriesClosedCessna 182Q · San Antonio, TXNTSB DEN78FQD35Accident · No injuriesClosedBeech J35 · Silver City, NMNTSB CHI78FEM41Accident · No injuriesClosedCessna 182 · Charlotte, MINTSB SEA78FA062Accident · 1 fatalClosedAero Comdr 500B · Great Falls, MTNTSB OAK78DXQ44Accident · Serious injuriesClosedLibelle 201B · Chester, CANTSB CHI78DEC53Accident · No injuriesClosedBalloon WKS 7 · Northville, MINTSB ANC78DAH08Accident · No injuriesClosedCessna 180 · Anchorage, AKNTSB CHI78FEG16Accident · Minor injuriesClosedPiper PA-28 · Newton, OHNTSB NYC78FNE36Accident · Minor injuriesClosedSchreder HP-14 · Monson, MANTSB NYC78FGM49Accident · Serious injuriesClosedSchweizer 2-33 · Freeport, PANTSB IAD78FA105Accident · 2 fatalClosedCessna 150 · Louisville, KYNTSB DEN78FQA34Accident · Serious injuriesClosedPiper PA-28 · Hatch, NMNTSB CHI78FEX36Accident · Minor injuriesClosedBell 47G4 · Scipio, INNTSB NYC78FHA33Accident · No injuriesClosedCessna 210T · Princeton, NJNTSB LAX78FUK02Accident · No injuriesClosedPiper PA-28 · Coolidge, AZNTSB ANC78DAH12Accident · Minor injuriesClosedPiper PA-12 · Maccarthy, AKNTSB SEA78FYM50Accident · 1 fatalClosedMini Coupe Buffum · Independence, ORNTSB LAX78FUM35Accident · Minor injuriesClosedBellanca 14-19 · San Diego, CANTSB ANC78DAH09Accident · No injuriesClosedPiper PA-22 · Chelatna Lake, AKNTSB MIA78FKG76Accident · Serious injuriesClosedCessna 152 · Birmingham, GANTSB CHI78FEE64Accident · No injuriesClosedPiper PA-23 · Frankfort, ILNTSB IAD78DKM21Accident · Minor injuriesClosedPiper PA-18 · Polkville, NCNTSB LAX78FUJ97Accident · No injuriesClosedCinquanta TRI PA · Oracle, AZNTSB DEN78FTE93Accident · No injuriesClosedGrum Amer AA-1C · Aurora, CONTSB DEN78FTE92Accident · No injuriesClosedSchweizer 2-33A · Boulder, CONTSB CHI78FEC49Accident · No injuriesClosedCessna 172M · South Rockwood, MINTSB IAD78FA098Accident · 2 fatalClosedCessna 210L · Hot Springs, VANTSB LAX78DUG49Accident · No injuriesClosedCessna 172 · Anza, CANTSB OAK78FJA15Accident · Minor injuriesClosedPiper PA-28 · Kailua-Kona, HINTSB DEN78DTE90Accident · No injuriesClosedCessna 152 · Ellicott, CONTSB OAK78FA044Accident · 1 fatalClosedCessna 182Q · Eureka, CANTSB NYC78FNC45Accident · No injuriesClosedPiper PA-30 · Warren, VTNTSB DEN78FTE89Accident · Serious injuriesClosedCessna 150 · Broomfield, CONTSB NYC78FNA44Accident · Minor injuriesClosedCessna 172 · Nantucket, MANTSB FTW78DRA36Accident · No injuriesClosedPiper PA-18 · Conroe, TXNTSB CHI78FEC48Accident · Minor injuriesClosedAeronca 7AC · Imlay City, MINTSB CHI78DEP62Accident · No injuriesClosedCessna 150 · Milwaukee, WINTSB OAK78DVA75Accident · Minor injuriesClosedMooney M20J · Atwater, CA