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 MKC75DER06Accident · No injuriesClosedPiper PA-25 · Moorhead, MNNTSB LAX75FUJ11Accident · No injuriesClosedWittman W-8 · Casa Grande, AZNTSB FTW75DPG08Accident · No injuriesClosedGrumman G-164A · Dumas, ARNTSB CHI75FEE07Accident · Serious injuriesClosedCessna 150L · Rockford, ILNTSB NYC75FNE02Accident · Minor injuriesClosedPiper PA-28 · Pittsfield, MANTSB NYC75DHJ03Accident · No injuriesClosedBeech 23 · West Hampton, NYNTSB MKC75FCG08Accident · Serious injuriesClosedPretzer MTC · Reeds Springs, MONTSB MKC75DER04Accident · Minor injuriesClosedAeronca 11AC · Glenwood, MNNTSB CHI75AC010Accident · 2 fatalClosedPiper PA-30 · Urbana, ILNTSB NYC75DHJ04Accident · No injuriesClosedSmith Mini · Eastport, NYNTSB ANC75FAG03Accident · Minor injuriesClosedStinson 108-1 · Big Lake, AKNTSB SEA75FYC05Accident · No injuriesClosedFly Baby 1 · Hubbard, ORNTSB NYC75ON001Accident · No injuriesClosedCessna 150H · Almeria, SPNTSB CHI75FET02Accident · No injuriesClosedPiper PA-28R · Huntington, INNTSB NYC75IN007Incident · No injuriesClosedBoeing 747 · Sydney, American SamoaNTSB OAK75FXQ10Accident · Minor injuriesClosedCessna 150 · Empire, NVNTSB MIA75FLD04Accident · No injuriesClosedCessna 206B · Tampa, FLNTSB MIA75FKG04Accident · No injuriesClosedBeech B95 · Carrollton, GANTSB SEA75FTA02Accident · No injuriesClosedMooney M20D · Glasgow, MTNTSB MKC75DER03Accident · Minor injuriesClosedCessna 140 · Albert Lea, MNNTSB NYC75FFA04Accident · No injuriesClosedPiper PA-18 · Three Mile Bay, NYNTSB IAD75FKW04Accident · Minor injuriesClosedGlobe GC-1A · Tullahoma, TNNTSB ANC75DAG02Accident · No injuriesClosedPiper PA-18 · Dillingham, AKNTSB OAK74DVG69Accident · No injuriesClosedCessna 170A · Redding, CANTSB NYC75FHA02Accident · No injuriesClosedRallye 220 · Pittstown, NJNTSB NYC75DFJ04Accident · No injuriesClosedCessna 182 · W Bloomfield, NYNTSB NYC74FNA05Accident · Serious injuriesClosedPiper PA-30 · Provincetown, MANTSB DEN75FQA04Accident · No injuriesClosedBeech D55 · Bernalillo, NMNTSB LAX75FUJ09Accident · Serious injuriesClosedPiper PA-28 · Douglas, AZNTSB MIA75DKT07Accident · No injuriesClosedBell 47G · Hollywood, FLNTSB LAX75FUA05Accident · No injuriesClosedCessna 320E · Long Beach, CANTSB CHI75AC003Accident · No injuriesClosedCessna 310C · Middleton, WINTSB MIA75FLD08Accident · Minor injuriesClosedChampion 7KCAB · Nw Smyrna Bch, FLNTSB LAX75AL002Accident · No injuriesClosedLuscombe 8E · Compton, CANTSB IAD75FLQ02Accident · No injuriesClosedHughes 269B · Dreyfus, KYNTSB FTW75FPA01Accident · No injuriesClosedPiper PA-28 · Rockwall, TXNTSB CHI75DEG01Accident · No injuriesClosedEvans VP-1 · Cincinnati, OHNTSB CHI75FEI33Accident · Minor injuriesClosedYarger JT-2 · Walbridge, OHNTSB MKC75DCJ03Accident · No injuriesClosedAmer Avco AA1-B · Utica, NENTSB MIA75DKT01Accident · No injuriesClosedBoeing B75N1 · Opa Locka, FLNTSB LAX75FUJ02Accident · No injuriesClosedCessna 182A · Benson, AZNTSB IAD75DLJ01Accident · No injuriesClosedCurtis-Wrt 16 · Gibsonville, NCNTSB DEN75DTE01Accident · Minor injuriesClosedHiller Acft UH12L4 · Delores, CONTSB MKC75FCA05Accident · Serious injuriesClosedCessna 150L · Cuba, MONTSB MIA74FLG01Accident · No injuriesClosedPiper PA-23 · Johns Island, SCNTSB CHI75DEC01Accident · No injuriesClosedVolmer Sprtmn · W Bloomfield, MINTSB IAD75FIG01Accident · No injuriesClosedBeech C18S · Ridgely, MDNTSB CHI75FEC02Accident · No injuriesClosedPiper PA-31 · Marine City, MINTSB NYC74FHA35Accident · Minor injuriesClosedPiper PA-28 · Sussex, NJNTSB MKC74FER65Accident · No injuriesClosedAeronca 7EC · Silver Bay, MN