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 MIA79D1068Accident · No injuriesClosedWaco UPF-7 · Kissimmee, FLNTSB MKC79DER36Accident · No injuriesClosedBeech B19 · Detroit Lakes, MNNTSB LAX79FUJ74Accident · No injuriesClosedCessna 207 · Show Low, AZNTSB FTW79FRD29Accident · No injuriesClosedPiper PA-28 · Patterson, LANTSB LAX79FVQ29Accident · Serious injuriesClosedGrumman AA-1C · Rosamond, CANTSB CHI79DEV20Accident · No injuriesClosedPitts S1C · Sparland, ILNTSB OAK79DVG38Accident · No injuriesClosedPiper PA-28 · Napa, CANTSB MKC79DCQ22Accident · No injuriesClosedCessna 150 · Derby, KSNTSB MIA79FLO65Accident · Minor injuriesClosedCessna 337 · Kissimmee, FLNTSB LAX79FA053Accident · 2 fatalClosedPiper PA-28 · Long Beach, CANTSB OAK79FVM20Accident · Minor injuriesClosedBeech H35 · Palo Alto, CANTSB MIA79FLD64Accident · No injuriesClosedAero Cmdr 100 · Bonita Springs, FLNTSB MIA79FKG39Accident · Minor injuriesClosedGrum Amer AA1C · Blue Ridge, GANTSB DEN79FTE34Accident · Minor injuriesClosedCessna T210M · Englewood, CONTSB OAK79DVG39Accident · No injuriesClosedCessna 150 · Hornbrook, CANTSB CHI79DEE55Accident · Minor injuriesClosedPitts S-2A · Rockford, ILNTSB ANC79DAG49Accident · No injuriesClosedMooney M20C · Seldovia, AKNTSB MIA79FKG38Accident · No injuriesClosedBeech V35B · Butler, GANTSB NYC79FFJ15Accident · Serious injuriesClosedPiper PA-28 · Steamburg, NYNTSB LAX79FA052Accident · 2 fatalClosedCessna 320E · Tucson, AZNTSB LAX79FA050Accident · 1 fatalClosedPiper PA-32 · La Posta, CANTSB DEN79FTC13Accident · Serious injuriesClosedCessna 340 · Rock Springs, WYNTSB FTW79FRD27Accident · No injuriesClosedLockheed 18 · Melville, LANTSB CHI79DEI24Accident · Minor injuriesClosedPiper J-3 · Galion, OHNTSB NYC79FNC27Accident · Serious injuriesClosedAeronca 7CCM · Patten, MENTSB MIA79FKG36Accident · No injuriesClosedCessna 150 · Springfield, GANTSB CHI79FEC22Accident · Minor injuriesClosedBeech A23A · Fraser, MINTSB NYC79DFJ17Accident · Serious injuriesClosedSchweizer SGS134 · Elmira, NYNTSB IAD79FA048Accident · 2 fatalClosedCessna 172A · Albany, KYNTSB OAK79DVW13Accident · No injuriesClosedPiper PA-32 · Furnace Creek, CANTSB IAD79FA046Accident · No injuriesClosedCessna 421 · Sevierville, TNNTSB SEA79FTA13Accident · No injuriesClosedGrumman G-164B · Billings, MTNTSB OAK79FA028Accident · 1 fatalClosedCessna 182P · Lodi, CANTSB OAK79DVG34Accident · No injuriesClosedCessna 150 · Grizzly Island, CANTSB MKC79FCG42Accident · Serious injuriesClosedNavion A · Carthage, MONTSB MIA79DLA36Accident · No injuriesClosedPiper PA-28 · Tallahassee, FLNTSB MIA79DKJ37Accident · No injuriesClosedCessna 150 · Jacksonville, ALNTSB MKC79DCG40Accident · Minor injuriesClosedPiper PA-32 · Excelsior Spgs, MONTSB FTW79FPG29Accident · No injuriesClosedBowers Fly · N Little Rock, ARNTSB NYC79FNC25Accident · Minor injuriesClosedBellanca 7GCBC · St.Albans, VTNTSB MKC79DER35Accident · Minor injuriesClosedCessna 150H · Chokio, MNNTSB MIA79FA077Accident · 2 fatalClosedPiper PA-31 · Labelle, FLNTSB CHI79FEK11Accident · Minor injuriesClosedGrumman AA5A · Port Columbus, OHNTSB LAX79FA04BAccident · 1 fatalClosedPiper PA-24 · Snowflake, AZNTSB CHI79FA048Accident · 2 fatalClosedPiper PA-31T · Elyria, OHNTSB IAD79FKW09Accident · No injuriesClosedCessna 172 · Murfreesboro, TNNTSB FTW79FPJ12Accident · 1 fatalClosedPiper PA-28 · Purcell, OKNTSB NYC79FGM36Accident · No injuriesClosedCessna 150 · Northeast, PANTSB OAK79FA026Accident · Serious injuriesClosedMooney M20E · Mercury, NVNTSB LAX79DUJ70Accident · No injuriesClosedBeech C-23 · Phoenix, AZ