NTSB investigations
20,996 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 MIA73AM036Accident · Minor injuriesClosedPsota/Smith Mini · Pensacola, FLNTSB FTW73FPG26Accident · Minor injuriesClosedCessna 172 · N.Little Rock, ARNTSB CHI73FEC10Accident · No injuriesClosedPiper PA-22 · Sebewaing, MINTSB ANC73DAG45Accident · No injuriesClosedPiper PA-14 · King Salmon, AKNTSB NYC73AN048Accident · 5 fatalClosedBeech 95-55 · Hamburg, PANTSB LAX72FUG18Accident · Serious injuriesClosedCessna 140 · Adelanto, CANTSB CHI73FEC09Accident · No injuriesClosedAero Comdr 100 · Laingsburg, MINTSB MKC73FCG12Accident · Minor injuriesClosedCessna 172E · Ft.Leavenwth, KSNTSB MIA73FLT07Accident · No injuriesClosedCessna 150K · Memphis, TNNTSB MIA73DKJ25Accident · Minor injuriesClosedPiper PA-22 · Atmore, ALNTSB MIA73AM035Accident · 3 fatalClosedBellanca 17-30A · Lake Wales, FLNTSB OAK73DJY08Accident · Minor injuriesClosedBell 204B · Lat Khai, LaosNTSB CHI73DEV12Accident · No injuriesClosedCessna 310G · Fairfield, ILNTSB NYC73FLJ10Accident · No injuriesClosedPiper PA-22 · Maple Hill, NCNTSB OAK73FVW08Accident · Serious injuriesClosedCessna 182 · Alamo, NVNTSB MIA73DLD16Accident · Minor injuriesClosedCessna 150 · Elfers, FLNTSB NYC73DKM12Accident · No injuriesClosedPiper PA-22 · Reidsville, NCNTSB DEN73FTE28Accident · Serious injuriesClosedBeech D35 · Denver, CONTSB MIA73AM045Accident · 1 fatalClosedCessna 177 · Natchez, MSNTSB DEN73FTM09Accident · No injuriesClosedCessna 150J · Ogden, UTNTSB CHI73FLQ11Accident · Serious injuriesClosedCessna 177 · Lexington, KYNTSB LAX73FUO1OAccident · No injuriesClosedCessna 150 · Van Nuys, CANTSB SEA73DYE16Accident · No injuriesClosedAmer Avco AA1A · Oak Harbor, WANTSB MIA73DKT16Accident · No injuriesClosedCessna 150K · Andytown, FLNTSB FTW73DPG20Accident · No injuriesClosedCessna 120 · Lakeview, ARNTSB NYC73FFJ09Accident · No injuriesClosedCessna 150 · Brockport, NYNTSB NYC73FFA17Accident · Minor injuriesClosedCessna 140 · Postenkill, NYNTSB NYC73FFA16Accident · Serious injuriesClosedEclectic 1C · Cairo, NYNTSB OAK73DVA21Accident · No injuriesClosedLuscomb 8E · Poplar, CANTSB MIA73FKQ16Accident · Serious injuriesClosedCessna 172 · Columbus, MSNTSB LAX73AL013Accident · No injuriesClosedBeech D18S · Santa Maria, CANTSB SEA73FYE14Accident · Minor injuriesClosedPiper PA-32 · Olympia, WANTSB MIA73RM030Accident · 5 fatalClosedPiper PA-23 · Georgetown, Burkina FasoNTSB OAK73DVG18Accident · No injuriesClosedSchweizer 2-33 · Vacaville, CANTSB CHI73FEI13Accident · Minor injuriesClosedCessna 182A · Cleveland, OHNTSB OAK73FVW07Accident · No injuriesClosedPiper PA-32 · Las Vegas, NVNTSB NYC73FNE08Accident · Serious injuriesClosedCessna 150J · Madison, CTNTSB LAX73AL012Accident · Minor injuriesClosedCessna 206 · Bakersfield, CANTSB NYC73FNA20Accident · No injuriesClosedCessna 177 · Oak Bluffs, MANTSB MIA73AM026Accident · 6 fatalClosedPiper PA-31 · Columbus, MSNTSB MIA73DKG18Accident · No injuriesClosedAmer Avco AA1A · Ft Benning, GANTSB FTW73FPG18Accident · No injuriesClosedCessna 182E · Pocahontas, ARNTSB NYC73FNC22Accident · Serious injuriesClosedCessna 150 · Pittsfield, MENTSB NYC73DNA19Accident · No injuriesClosedNavion A · Providence, RINTSB NYC73DHD13Accident · Minor injuriesClosedPiper PA-28 · Bristol, PANTSB NYC73DFJ07Accident · No injuriesClosedSchweizer 1-23 · Campbell, NYNTSB MKC73DCD29Accident · No injuriesClosedPerth-Amboy CK · Ottumwa, IANTSB MKC73AK019Accident · 2 fatalClosedJohnson 185 · Blakesburg, IANTSB NYC73FHM10Accident · No injuriesClosedPiper PA-28 · East Hanover, NJNTSB CHI73FEM16Accident · Minor injuriesClosedCessna 172L · Newberry, MI