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 LAX80DUJ19Accident · Minor injuriesClosedCessna 152 · Phoenix, AZNTSB DEN80FA011Accident · 2 fatalClosedCessna 182 · Longmont, CONTSB SEA80FTA03Accident · No injuriesClosedCessna 182E · Red Lodge, MTNTSB LAX80DUJ17Accident · No injuriesClosedCessna 120 · Peoria, AZNTSB CHI80FEG05Accident · No injuriesClosedPiper PA-32 · Batavia, OHNTSB FTW80DPG05Accident · No injuriesClosedPiper PA-28 · Cherokee Vlg, ARNTSB NYC80FGM08Accident · No injuriesClosedLake LA4200 · New Castle, PANTSB MIA80FLA08Accident · Minor injuriesClosedPiper PA-31 · Jacksonville, FLNTSB MIA80FA014Accident · 4 fatalClosedPiper PA-32R · Anniston, ALNTSB LAX80FA018Accident · 5 fatalClosedCessna 180H · Weaverville, CANTSB LAX80FA011Accident · 3 fatalClosedBeech V35B · Delta, OHNTSB CHI80FA012Accident · 3 fatalClosedCessna 210L · Fort Wayne, INNTSB NYC80FNE05Accident · Minor injuriesClosedSchweizer SGS233 · Terryville, CTNTSB CHI80FEP06Accident · No injuriesClosedCessna 172 · Portage, WINTSB MIA80DLD18Accident · No injuriesClosedSchweizer SGS135 · Lakeland, FLNTSB MIA80DLD15Accident · Serious injuriesClosedJantar STD SZD-41 · Winter Haven, FLNTSB DEN80FTE09Accident · 1 fatalClosedWoody Push WAS-2 · Rocky Ford, CONTSB CHI80FA009Accident · Minor injuriesClosedCessna T210L · Galesburg, ILNTSB MIA80FA012Accident · 2 fatalClosedDouglas C-54D · Mccormick, SCNTSB DEN80FA009Accident · 2 fatalClosedCessna 500 · Castle Rock, CONTSB LAX80DJA04Accident · No injuriesClosedCessna 152 · Honolulu, HINTSB IAD80FIG02Accident · No injuriesClosedPiper PA-28 · Grasonville, MDNTSB CHI80FEI07Accident · Minor injuriesClosedCessna 150 · Ravenna, OHNTSB FTW80DQD02Accident · No injuriesClosedCessna 150 · Fort Stockton, TXNTSB DEN80FTM06Accident · Minor injuriesClosedPiper PA-38 · Ogden, UTNTSB IAD80FLJ03Accident · Serious injuriesClosedPiper PA-28 · Kenly, NCNTSB DEN80DTE06Accident · No injuriesClosedBellanca 14-19 · Center, CONTSB NYC80DGT02Accident · No injuriesClosedCessna 172 · Gaines, PANTSB LAX80DUJ03Accident · Minor injuriesClosedPiper PA-28 · Winslow, AZNTSB SEA80FA005Accident · 3 fatalClosedCessna T310R · Salem, ORNTSB SEA80DYP04Accident · No injuriesClosedCessna 182 · Dixie, IDNTSB LAX80FVW04Accident · No injuriesClosedCessna 150 · Las Vegas, NVNTSB LAX80DVD01Accident · No injuriesClosedCessna 152 · Santa Rosa, CANTSB CHI80FEP05Accident · Serious injuriesClosedCessna 150M · Omro, WINTSB IAD80DID01Accident · No injuriesClosedGrum Amer AA1-C · Cheasapeake, VANTSB NYC80FGM06Accident · No injuriesClosedCessna C152 · Belle Vernon, PANTSB MKC80DER09Accident · No injuriesClosedCessna 340A · Grand Rapids, MNNTSB FTW80FPG02Accident · Serious injuriesClosedPiper J-3 · Pine Bluff, ARNTSB DEN80FQA08Accident · Minor injuriesClosedCessna T210L · Farmington, NMNTSB FTW80FPJ03Accident · 2 fatalClosedMustang II · Nedmond, OKNTSB IAD80FA007Accident · 5 fatalClosedMitsubishi MU-2F · Nashville, TNNTSB FTW80FRA05Accident · No injuriesClosedCessna 340 · Katy, TXNTSB FTW80IA006Incident · Minor injuriesClosedBeechcraft B99 · Abilene, TXNTSB DCA80RA003Accident · 72 fatalClosedDouglas DC-10 · Mexico City, MexicoNTSB ANC80FA008Accident · 2 fatalClosedDouglas DC-3 · Bettles, AKNTSB LAX80FUA02Accident · No injuriesClosedPiper PA-28 · Huntington Bch, CANTSB IAD80FA006Accident · Minor injuriesClosedPiper PA-23 · Harlan, KYNTSB CHI80DA008Accident · 1 fatalClosedPiper PA-28 · Plainwell, MINTSB UNK80X0101Accident · 1 fatalClosedNavion G · Concord, MANTSB MKC80DER08Accident · Minor injuriesClosedAeronca 7AC · Alexandria, MN