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 MIA78FKJ67Accident · No injuriesClosedPiper PA-28 · Muscle Shoals, ALNTSB CHI78FEP49Accident · Minor injuriesClosedCessna 172E · Pewaukee, WINTSB OAK78FA040Accident · 1 fatalClosedScheitzer 2-33A · Boulder City, NVNTSB OAK78DVG66Accident · No injuriesClosedBoeing A75 · Lower Lake, CANTSB LAX78FUJ90Accident · Minor injuriesClosedPiper PA-23 · Scottsdale, AZNTSB NYC78FNC41Accident · Minor injuriesClosedLake 4-200 · Meredith, NHNTSB MKC78DER76Accident · No injuriesClosedCessna 172 · Wilmar, MNNTSB CHI78DEP48Accident · Minor injuriesClosedThorp T18 · Kenosha, WINTSB NYC78FNA37Accident · Serious injuriesClosedBeech A23-24 · E Providence, RINTSB MIA78FA106Accident · Minor injuriesClosedCurtiss C-46 · Opa Locka, FLNTSB ANC78FA058Accident · Serious injuriesClosedDehavilland DHC-2 · Anaktuvuk Pass, AKNTSB NYC78DNC40Accident · No injuriesClosedCessna 185 · St Albans, VTNTSB FTW78FPJ31Accident · No injuriesClosedCessna 182 · Cushing, OKNTSB MKC78FA056Accident · 2 fatalClosedCessna 150 · Columbus, KSNTSB MIA78FA105Accident · 2 fatalClosedTed Smith 600 · Jacksonville, FLNTSB FTW78DRA33Accident · No injuriesClosedAero-Comdr S-2R · Beasley, TXNTSB OAK78DVA58Accident · No injuriesClosedPiper PA-28 · Coalinga, CANTSB FTW78FQD26Accident · Minor injuriesClosedNavion B · El Paso, TXNTSB CHI78FEC41Accident · No injuriesClosedSchweizer SGS233 · Pontiac, MINTSB CHI78FEC40Accident · 1 fatalClosedRyan ST3KR · Petersburg, MINTSB LAX78FUJ81Accident · Serious injuriesClosedCessna 310 · Grand Canyon, AZNTSB MIA78DKT63Accident · No injuriesClosedCessna 150 · W Palm Beach, FLNTSB CHI78FA049Accident · 1 fatalClosedBellanca 17-30A · Rhinelander, WINTSB SEA78FA044Accident · 1 fatalClosedBeech B24R · Vashon, WANTSB MIA78FLA45Accident · Serious injuriesClosedSikorsky H-19C · Welaka, FLNTSB NYC78FNE26Accident · Serious injuriesClosedSchemp HS7 · Sterling, MANTSB LAX78FUG39Accident · Minor injuriesClosedHiller Acft UH-12E · Redlands, CANTSB DEN78FQA38Accident · No injuriesClosedCessna 150G · Albuquerque, NMNTSB NYC78FHM20Accident · Serious injuriesClosedCessna 182 · Fairfield, NJNTSB MIA78FKJ59Accident · No injuriesClosedCessna 206 · Elberta, ALNTSB CHI78FEE51Accident · No injuriesClosedSchweizer SGU222 · Park Forest, ILNTSB SEA78DYM44Accident · Serious injuriesClosedMaule M5220C · Enterprise, ORNTSB NYC78FNE25Accident · Serious injuriesClosedCessna 140 · Oxford, MANTSB ANC78FA045Accident · 1 fatalClosedCessna 180 · Iliamna, AKNTSB OAK78DVD44Accident · No injuriesClosedBell 47G · Glen Ellen, CANTSB NYC78FNC38Accident · Serious injuriesClosedPiper J3F-65 · Houlton, MENTSB OAK78DXQ32Accident · Minor injuriesClosedCessna 182 · Minden, NVNTSB MKC78FCG46Accident · No injuriesClosedCessna 150 · Richmond, MONTSB LAX78FUQ35Accident · Minor injuriesClosedPiper PA-32 · Van Nuys, CANTSB DEN78FQA37Accident · Minor injuriesClosedAlon A-2 · Albuquerque, NMNTSB MKC78DCJ25Accident · Serious injuriesClosedLuscombe 8A · Ogallala, NENTSB MIA78DKG56Accident · No injuriesClosedPiper PA-28 · Toccoa, GANTSB SEA78DYK19Accident · No injuriesClosedCessna 170 · Bandon, ORNTSB FTW78DPG55Accident · No injuriesClosedPiper PA-28R · Dermott, ARNTSB OAK78DXQ30Accident · Minor injuriesClosedErco 415-D · Rawhide, NVNTSB NYC78FNC36Accident · Serious injuriesClosedCessna 172 · Wolfeboro, NHNTSB NYC78FHJ18Accident · No injuriesClosedSchweizer 2-33 · Brookhaven, NYNTSB NYC78FHA30Accident · Minor injuriesClosedTaylorcraft BC12-D · Manville, NJNTSB MKC78FER70Accident · Minor injuriesClosedCessna T210L · Merrifield, MNNTSB DEN78DTM27Accident · Serious injuriesClosedPiper PA-28 · Oljato, UT