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 CHI74FEP41Accident · No injuriesClosedAmer Avco AA-1B · Waunakee, WINTSB OAK74DVG41Accident · Minor injuriesClosedSchweizer SGU222 · Shingle Spg, CANTSB MKC74DCJ36Accident · No injuriesClosedCessna 150L · North Platte, NENTSB MIA74FKG70Accident · Serious injuriesClosedPiper PA-28 · Newman, GANTSB FTW74FPG56Accident · No injuriesClosedAeronca 11AC · Benton, ARNTSB NYC74FHM24Accident · Minor injuriesClosedMooney M20B · Flanders, NJNTSB DEN74DQA38Accident · No injuriesClosedBeech B19 · Los Lunas, NMNTSB MIA74AM086Accident · Serious injuriesClosedCessna 150G · Stone Mountain, GANTSB IAD74FIA09Accident · No injuriesClosedCessna 172E · Fort Belvoir, VANTSB OAK74DVW17Accident · Minor injuriesClosedBowlus BA-100 · Henderson, NVNTSB OAK74FVA56Accident · No injuriesClosedCallair A-6 · Kerman, CANTSB IAD74DLJ38Accident · No injuriesClosedCessna 180 · Jacksonville, NCNTSB OAK74FXQ30Accident · Minor injuriesClosedSlingsby T53B · Minden, NVNTSB OAK74FVW16Accident · Minor injuriesClosedChampion 7EC · Lone Pine, CANTSB CHI74DEC34Accident · No injuriesClosedLuscombe 8A · Romeo, MINTSB SEA74FTA20Accident · No injuriesClosedCessna 210 · Glendive, MTNTSB DEN74DTE64Accident · Minor injuriesClosedCessna 182M · Basalt, CONTSB MIA74FLD78Accident · No injuriesClosedCessna 150 · Kissimmee, FLNTSB FTW74AF070Accident · 2 fatalClosedBellanca 17-30 · N.Little Rock, ARNTSB CHI74FET20Accident · No injuriesClosedCessna 182A · Berrien Spgs, MINTSB DEN74FQA35Accident · No injuriesClosedCessna 310K · Albuquerque, NMNTSB NYC74AN083Accident · 1 fatalClosedCessna 172M · Martinsville, VANTSB MKC74DCQ33Accident · No injuriesClosedLuscombe 8A · St George, KSNTSB LAX74DUJ50Accident · No injuriesClosedCessna 150 · Phoenix, AZNTSB ANC74FAA30Accident · Minor injuriesClosedPiper PA-11 · Golovin, AKNTSB CHI74FEA33Accident · No injuriesClosedPiper PA-24 · W Lafayette, INNTSB MKC74FCJ32Accident · No injuriesClosedPiper PA-23 · Omaha, NENTSB LAX74FUJ45Accident · Minor injuriesClosedBeech 35-A33 · Tucson, AZNTSB ANC74AA059Accident · No injuriesClosedCessna 180 · Kwigillingok, AKNTSB OAK74FVG35Accident · Minor injuriesClosedTaylorcraft BC12-D · Burson, CANTSB FTW74FRG70Accident · Minor injuriesClosedErco 415-C · Alice, TXNTSB MIA74DLA37Accident · Minor injuriesClosedAero Comdr S2R · Carrabelle, FLNTSB IAD74AI053Accident · 3 fatalClosedNavion B · Bowie, MDNTSB FTW74DQG46Accident · No injuriesClosedTaylorcraft BC12-D · Midland, TXNTSB CHI74DEE63Accident · No injuriesClosedCessna 150 · Rochelle, ILNTSB NYC74FGM21Accident · No injuriesClosedAeronca 65-LA · Mckean, PANTSB MIA74FLD73Accident · No injuriesClosedMooney M20F · Lakeland, FLNTSB ANC74DAA28Accident · Serious injuriesClosedPilatus PC6BH2 · Point Lay, AKNTSB MIA74FKG59Accident · No injuriesClosedTemco GC-1B · Lawrenceville, GANTSB DEN74AD044Accident · 1 fatalClosedCessna T210F · Rocky Ford, CONTSB CHI74AC076Accident · 6 fatalClosedBeech 95-B55 · Ellettsville, INNTSB SEA74AS036Accident · 1 fatalClosedPiper PA-28 · Caldwell, IDNTSB MIA74FLG25Accident · Serious injuriesClosedCessna 182 · Allendale, SCNTSB SEA74FTA18Accident · 1 fatalClosedFly Baby Huey · Colstrip, MTNTSB NYC74DNA38Accident · No injuriesClosedAero Comdr 100A · Haverhill, MANTSB IAD74DLQ29Accident · Minor injuriesClosedCessna 150 · Mentor, KYNTSB MIA74AM078Accident · Minor injuriesClosedCessna 188A · Clewiston, FLNTSB LAX74FUJ44Accident · Serious injuriesClosedBeech D35 · Lake Havasu, AZNTSB FTW74DRD23Accident · No injuriesClosedBell 206B · Gloria, LANTSB ANC74DAA26Accident · No injuriesClosedCessna 175 · North Pole, AK