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 ANC80FA033Accident · Serious injuriesClosedCessna 207 · South Naknek, AKNTSB MKC80AA026Accident · 3 fatalClosedAerospatle AS350D · Webster City, IANTSB MKC80FTK09Accident · No injuriesClosedCessna 182 · Spearfish, SDNTSB IAD80FLQ14Accident · Serious injuriesClosedPiper PA-24 · Lexington, KYNTSB CHI80FEI11Accident · No injuriesClosedCessna T337D · East Liverpool, OHNTSB LAX80FUA09Accident · No injuriesClosedPiper PA-24 · Catalina Is, CANTSB MIA80DKJ23Accident · No injuriesClosedPiper PA-32 · Hokes Bluff, ALNTSB ANC80DAG32Accident · Minor injuriesClosedCessna 170B · Montana Creek, AKNTSB MIA80FA036Accident · 2 fatalClosedCessna 210N · Jacksonville, FLNTSB FTW80FA048Accident · 7 fatalClosedMitsubishi MU-2B · New Orleans, LANTSB SEA80FYM16Accident · Minor injuriesClosedPiper PA-24 · Newport, ORNTSB CHI80FA026Accident · 4 fatalClosedPiper PA-32 · Ft Wayne, INNTSB MKC80FCD13Accident · Minor injuriesClosedBeech E33A · Carroll, IANTSB CHI80FEE16Accident · Serious injuriesClosedBeech 95-C55 · Rock Island, ILNTSB MKC80FCA08Accident · Minor injuriesClosedBeech N35 · Cape Girardeau, MONTSB ANC80DAG28Accident · No injuriesClosedPiper PA-12 · Port Alsworth, AKNTSB MKC80FA022Accident · Serious injuriesClosedBeech A35 · Creston, IANTSB FTW80FA042Accident · 4 fatalClosedMitsubishi MU-2B · Houston, TXNTSB DEN80FA025Accident · 2 fatalClosedPiper PA-28 · Pueblo, CONTSB LAX80DVG14Accident · Minor injuriesClosedPiper J3C-65 · Roseville, CANTSB FTW80DPD10Accident · No injuriesClosedCessna 182 · Nocona, TXNTSB NYC80FA024Accident · 3 fatalClosedBeech 95-B55 · Gabriels, NYNTSB IAD80FA023Accident · 2 fatalClosedBellanca 17-30A · Morrisville, NCNTSB MKC80FA020Accident · 2 fatalClosedCessna 150 · Sioux Falls, SDNTSB MIA80DKT26Accident · No injuriesClosedBeech 35 · W Palm Beach, FLNTSB LAX80FUM11Accident · Minor injuriesClosedPiper PA-22 · Ocotillo Well, CANTSB CHI80FEM14Accident · Serious injuriesClosedPiper PA32RT · Ironwood, MINTSB NYC80FNC11Accident · Minor injuriesClosedCessna 150 · Augusta, MENTSB FTW80FRG25Accident · No injuriesClosedBeech D50 · Brownsville, TXNTSB MIA80DLA15Accident · Serious injuriesClosedSchweizer SGS233 · High Springs, FLNTSB LAX80DVD22Accident · No injuriesClosedCessna 150L · Tracy, CANTSB FTW80DQD03Accident · Serious injuriesClosedCessna R172 · El Paso, TXNTSB FTW80AA037Accident · 2 fatalClosedAero Comdr 690A · New Castle, OKNTSB SEA80FYP10Accident · No injuriesClosedCessna 182P · Richland, WANTSB LAX80DXQ17Accident · No injuriesClosedSchweizer SG2-33 · Reno, NVNTSB SEA80FYA06Accident · Serious injuriesClosedCessna 210E · Burley, IDNTSB LAX80FUJ29Accident · No injuriesClosedCessna TU206G · Glendale, AZNTSB DEN80DA019Accident · No injuriesClosedPiper PA-34 · Roswell, NMNTSB NYC80FA021Accident · 2 fatalClosedPiper PA-18 · East Machias, MENTSB IAD80FA021Accident · 1 fatalClosedBeech E55 · Amherstdale, WVNTSB ANC80FA025Accident · Minor injuriesClosedDehavnd Can DHC-6 · Kenai, AKNTSB LAX80FUQ08Accident · 2 fatalClosedCulver LCA · Mojave, CANTSB SEA80DTI03Accident · No injuriesClosedPiper PA-28 · Missoula, MTNTSB IAD80FA020Accident · 1 fatalClosedPiper PA-23 · New Bern, NCNTSB FTW80DRJ11Accident · No injuriesClosedCessna 152 · Texarkana, ARNTSB ANC80DAG25Accident · Serious injuriesClosedPiper PA-12 · Stoney River, AKNTSB NYC80FHM07Accident · Minor injuriesClosedCessna 182 · Spring Valley, NYNTSB MIA80FLD38Accident · No injuriesClosedCessna 150 · Melbourne, FLNTSB CHI80FA021Accident · 2 fatalClosedCessna 310Q · Winthrop Hbr, ILNTSB ANC80FA023Accident · 7 fatalClosedCessna 185 · Shungnak, AK