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 ANC75DAG78Accident · No injuriesClosedPiper J-3 · Talkeetna, AKNTSB ANC75AA063Accident · Minor injuriesClosedPiper PA-34 · Togiak, AKNTSB FTW75FPG36Accident · Serious injuriesClosedPiper PA-23 · Brookland, ARNTSB IAD75FID15Accident · Minor injuriesClosedTaylorcraft BC1265 · Gloucester, VANTSB OAK75FVM23Accident · Minor injuriesClosedBeech H35 · San Jose, CANTSB DEN75FTE55Accident · No injuriesClosedLear Jet 23 · Meeker, CONTSB LAX75O0018Accident · Minor injuriesClosedCessna 172 · Puertecitos, MexicoNTSB FTW75DPD30Accident · No injuriesClosedAeronca 7AC · Denton, TXNTSB CHI75FEC39Accident · No injuriesClosedPiper PA-23 · Pontiac, MINTSB ANC75AA061Accident · Minor injuriesClosedCessna 207 · Egegik, AKNTSB MIA75FLA34Accident · Serious injuriesClosedCessna 182 · Lake Como, FLNTSB OAK75DVD41Accident · Minor injuriesClosedCessna 150F · Fremont, CANTSB OAK75DVA46Accident · No injuriesClosedBeech B19 · Los Banos, CANTSB FTW75ARD33Accident · No injuriesClosedSchweizer SGS126 · Covington, LANTSB FTW75AF056Accident · 2 fatalClosedBeech T-34A · Granbury, TXNTSB SEA75FYE34Accident · Serious injuriesClosedHelio Acft H-295 · Port Orchard, WANTSB MKC75AK044Accident · 2 fatalClosedPiper PA-24 · Racine, MONTSB FTW75DQD16Accident · No injuriesClosedCallair A-3 · Alpine, TXNTSB NYC75AN087Accident · No injuriesClosedBrittnorman BN-2A · Provincetown, MANTSB MIA75FKG58Accident · Minor injuriesClosedMaule 220C · Chamblee, GANTSB CHI75FEM28Accident · Serious injuriesClosedThorp T-18 · Lansing, MINTSB CHI75AC059Accident · 2 fatalClosedBeech G35 · Rock Falls, ILNTSB CHI75AC058Accident · 1 fatalClosedNa Rockwell NA-265 · Pontiac, MINTSB SEA75AS033Accident · 3 fatalClosedCessna 182J · Albany, ORNTSB OAK75FJA08Accident · Minor injuriesClosedCessna 150 · Honolulu, HINTSB CHI75FEC38Accident · No injuriesClosedCessna T337B · Pontiac, MINTSB FTW75AF055Accident · 1 fatalClosedBeech B60 · Houston, TXNTSB MIA75AM061Accident · 1 fatalClosedCessna 182J · Tampa, FLNTSB FTW75FRA18Accident · Minor injuriesClosedPiper PA-28 · Beaumont, TXNTSB FTW75AF052Accident · 2 fatalClosedPiper PA-23 · New Orleans, LANTSB SEA75DTI19Accident · No injuriesClosedCessna 150 · Wh.Sulphur Spg, MTNTSB IAD75FIG12Accident · No injuriesClosedPiper PA-28 · Bowie, MDNTSB CHI75FEG14Accident · Serious injuriesClosedSchweizer 2-33 · Waynesville, OHNTSB CHI75AC056Accident · 4 fatalClosedBeech B90 · Joliet, ILNTSB MKC75AK043Accident · 4 fatalClosedMooney M20E · Chadron, NENTSB IAD75AI047Accident · 2 fatalClosedBeech 95-B55 · Lawrenceburg, TNNTSB FTW75DPJ17Accident · No injuriesClosedBeech 65-90 · Gage, OKNTSB MKC75FER50Accident · No injuriesClosedCessna 175A · Eden Prairie, MNNTSB MKC75AK041Accident · 1 fatalClosedBeech 95 · Cape Girardeau, MONTSB MKC75AK040Accident · 1 fatalClosedCessna 210B · Wichita, KSNTSB MIA75AM056Accident · 1 fatalClosedCessna A150L · Ocala, FLNTSB CHI75FEC35Accident · Serious injuriesClosedEmeraude 1 · Onondaga, MINTSB NYC75FFA28Accident · No injuriesClosedDehavilland DHC-2 · Dexter, NYNTSB FTW75FRG54Accident · No injuriesClosedCessna 320D · Austin, TXNTSB SEA75FYG18Accident · No injuriesClosedBeech 99A · Pullman, WANTSB MIA75FLA32Accident · Serious injuriesClosedMooney M20F · Jacksonville, FLNTSB SEA75DYG19Accident · No injuriesClosedCessna 172 · Colville, WANTSB SEA75DYE31Accident · No injuriesClosedCessna 150 · Waldron Island, WANTSB NYC75AN083Accident · 2 fatalClosedLockheed PV-1 · Egg Harbor, NJNTSB FTW75AF051Accident · 5 fatalClosedDouglas DC-3C · Houston, TX