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 FTW79FPD46Accident · Serious injuriesClosedFirefly 7 · Mansfield, TXNTSB SEA79FYK32Accident · No injuriesClosedBeech P35 · Sunriver, ORNTSB MIA79FA126Accident · 2 fatalClosedPiper PA-28 · Hartsville, SCNTSB IAD79FA086Accident · Minor injuriesClosedCessna 150 · Gaithersburg, MDNTSB ANC79DAH19Accident · Minor injuriesClosedPiper PA-18 · Sparrevohn, AKNTSB MKC79FCG79Accident · Minor injuriesClosedStoeger Vol VJ22 · Waldron, MONTSB CHI79FA078Accident · 2 fatalClosedCessna 172G · Brownstown, ILNTSB CHI79FA077Accident · No injuriesClosedBoeing 707 · Palatine, ILNTSB SEA79DYM65Accident · No injuriesClosedEnstrom 280C · Vancouver, WANTSB MIA79FKG68Accident · No injuriesClosedCessna 172 · Marietta, GANTSB MIA79FA123Accident · 2 fatalClosedCessna 182P · Folkston, GANTSB LAX79IA085Incident · No injuriesClosedCessna 150 · Compton, CANTSB ANC79DAA39Accident · No injuriesClosedCessna 180A · Selawik, AKNTSB CHI79DER07Accident · No injuriesClosedPiper PA-28 · Birchwood, WINTSB SEA79DYE48Accident · Minor injuriesClosedGrum-Amer AA-5A · Friday Harbor, WANTSB NYC79FA079Accident · 1 fatalClosedCessna 150 · Pennington, NJNTSB LAX79DUK15Accident · No injuriesClosedCessna 172 · Payson, AZNTSB LAX79DA080Accident · Minor injuriesClosedBrieglab 12BD · Crystal City, CANTSB DEN79FA060Accident · Minor injuriesClosedCessna 206 · Grand Junction, CONTSB LAX79FA079Accident · 1 fatalClosedPiper PA-38 · Ramona, CANTSB NYC79FA093Accident · No injuriesClosedCessna 172 · Keene, NHNTSB SEA79DYK30Accident · No injuriesClosedCessna 150 · Eugene, ORNTSB MIA79DLD95Accident · No injuriesClosedPiper PA-28 · Fort Myers, FLNTSB FTW79FPD39Accident · No injuriesClosedPiper PA-38 · Sunset, TXNTSB FTW79FA107Accident · 1 fatalClosedCessna 172N · Lafayette, LANTSB CHI79FEE76Accident · Serious injuriesClosedBrown V-EZE · Plainfield, ILNTSB CHI79FEI41Accident · 1 fatalClosedOsprey 2 · Medina, OHNTSB MKC79DCQ44Accident · No injuriesClosedBeech C23 · Newton, KSNTSB NYC79DHA25Accident · No injuriesClosedCessna 172F · Brecknock, PANTSB LAX79FVG77Accident · 2 fatalClosedDouglas VJ22 · Courtland, CANTSB NYC79FA087Accident · Serious injuriesClosedPiper PA-28 · Fishers Island, NYNTSB CHI79FEV30Accident · Minor injuriesClosedCessna 182A · Hillsboro, ILNTSB CHI79FEC52Accident · Serious injuriesClosedPiper PA-28 · Marine City, MINTSB ANC79DAH08Accident · Minor injuriesClosedPiper PA-18A · Anchorage, AKNTSB LAX79DXQ33Accident · No injuriesClosedEnstrom 280C · Duckwater, NVNTSB LAX79DVG76Accident · Minor injuriesClosedPiper J3 · Pleasant Grove, CANTSB NYC80FA085Accident · 1 fatalClosedBeech 58 · Middletown, PANTSB IAD79FKW20Accident · Minor injuriesClosedLake 4-200 · Nashville, TNNTSB SEA79FT124Accident · Serious injuriesClosedPiper PA-24 · Big Sandy, MTNTSB SEA79FYE41Accident · No injuriesClosedCessna A185F · Renton, WANTSB NYC79FHJ26Accident · Serious injuriesClosedPiper PA-34 · East Quogue, NYNTSB CHI79DA068Accident · 1 fatalClosedCessna 177B · Bloomington, INNTSB MIA79FLD87Accident · Serious injuriesClosedPiper J3C · Aurburndale, FLNTSB NYC79FA083Accident · Serious injuriesClosedPiper PA-23 · Sundown, NYNTSB DEN79FTC25Accident · Serious injuriesClosedCessna 182 · Evanston, WYNTSB CHI79DA066Accident · 1 fatalClosedPiper PA-31 · Bluffton, OHNTSB SEA79FA051Accident · Minor injuriesClosedMaule M-4 · Vancouver, WANTSB IAD79DLJ15Accident · No injuriesClosedPiper PA-25 · Cove City, NCNTSB MIA79FKG63Accident · Serious injuriesClosedCessna 150L · Kennesaw, GANTSB IAD79FLJ13Accident · Serious injuriesClosedPiper PA-28R · Raliegh, NC