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 FTW81FRG01Accident · Minor injuriesClosedBellanca 17-30 · San Antonio, TXNTSB CHI81FEP05Accident · No injuriesClosedCessna 150L · Rhinelander, WINTSB ATL81FA007Accident · 4 fatalClosedCessna T188C · Theodore, ALNTSB NYC81IA002Incident · No injuriesClosedLockheed L1011 · Newark, NJNTSB NYC81FA003Accident · No injuriesClosedCessna 500 · Plymouth, MANTSB MIA81FA001Accident · 4 fatalClosedPiper PA-28 · Aguadilla, PRNTSB MKC81FCA01Accident · Serious injuriesClosedBellanca 17-30A · Fenton, MONTSB LAX81DXQ02Accident · Serious injuriesClosedPiper PA-28 · Elko, NVNTSB CHI81DEP04Accident · No injuriesClosedPiper PA-28 · Cottage Grove, WINTSB NYC81DHD01Accident · No injuriesClosedCessna 172 · Woodbine, NJNTSB MKC81FA003Accident · 2 fatalClosedCessna 182H · Newcastle, WYNTSB LAX81FVM01Accident · No injuriesClosedCessna 210 · San Jose, CANTSB ATL81DKJ01Accident · No injuriesClosedBeech C18S · Theodore, ALNTSB SEA81DYM02Accident · No injuriesClosedPiper PA-28 · Molalla, ORNTSB SEA81DYA01Accident · No injuriesClosedCessna 182 · Picabo, IDNTSB FTW81FA002Accident · Serious injuriesClosedCessna U206F · Lonoke, ARNTSB ATL81FID01Accident · Serious injuriesClosedMccullock J2 · Chesapeake, VANTSB LAX80FVA03Accident · 2 fatalClosedPiper PA-32 · Merced, CANTSB FTW81FRJ02Accident · No injuriesClosedPiper PA-22 · Texarkana, TXNTSB CHI80FEE53Accident · No injuriesClosedCessna 310Q · West Chicago, ILNTSB LAX80FVD39Accident · Minor injuriesClosedDehavilland DH-82 · San Rafael, CANTSB LAX80FA143Accident · 2 fatalClosedCessna 150M · San Fernando, CANTSB LAX80DVG75Accident · Minor injuriesClosedCessna 172C · Mount Shasta, CANTSB FTW80FA123Accident · No injuriesClosedCessna U206 · Austin, TXNTSB ATL88DKJ34Accident · No injuriesClosedPiper PA-25 · Bay Minette, ALNTSB NYC80FNA26Accident · Serious injuriesClosedPiper PA-28 · Hanson, MANTSB MIA80FKA10Accident · No injuriesClosedCessna 172 · Guanica, PRNTSB LAX80FA142Accident · 2 fatalClosedAero Comdr 500-B · Santa Maria, CANTSB CHI81FEK27Accident · No injuriesClosedSchleicher K7 · Montpelier, OHNTSB ATL80FKW23Accident · No injuriesClosedCessna 152 · Murfreesboro, TNNTSB LAX80FUK04Accident · Serious injuriesClosedPiper PA-28 · Show Low, AZNTSB ATL80FIA16Accident · No injuriesClosedCessna 172 · Manassas, VANTSB DEN80DTG17Accident · No injuriesClosedCessna 150 · Oakes, NDNTSB FTW80DPG68Accident · No injuriesClosedCessna 172I · Marianna, ARNTSB SEA80DYM62Accident · No injuriesClosedCessna 182P · Goldendale, WANTSB FTW80FQA44Accident · Minor injuriesClosedRaven RX-7 · Albuquerque, NMNTSB MKC80FA057Accident · 3 fatalClosedGulf-Amer AA-5B · Chesterfield, MONTSB FTW80DRG72Accident · No injuriesClosedCessna TU206F · Mcallen, TXNTSB ATL80FKG27Accident · Minor injuriesClosedAerostar 601P · Peachtree City, GANTSB ATL80DKW21Accident · No injuriesClosedChampion 7ECA · Lawrenceburg, TNNTSB ANC80DAH05Accident · No injuriesClosedCessna U206G · Dillingham, AKNTSB CHI80DEE55Accident · No injuriesClosedPiper PA-28 · New Lenox, ILNTSB MIA80FA099Accident · 6 fatalClosedBeech 65 · Clearwater, FLNTSB FTW80FA114Accident · 1 fatalClosedCessna 401 · Houma, LANTSB DEN80FTE78Accident · No injuriesClosedCessna 210A · Brighton, CONTSB ANC80DAH06Accident · No injuriesClosedLake 4-200 · Anchorage, AKNTSB MIA80DLD98Accident · No injuriesClosedCessna 210L · Ft Pierce, FLNTSB MKC80DCJ31Accident · No injuriesClosedPiper PA-28 · Ogallala, NENTSB MIA80FLD97Accident · 1 fatalClosedFletcher KR-1 · Sarasota, FLNTSB DEN80DTE76Accident · No injuriesClosedBellanca 14-193 · Delta, CO