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 MIA73FLD78Accident · Minor injuriesClosedPiper PA-28 · Melbourne, FLNTSB FTW73DRA26Accident · No injuriesClosedCessna 150L · Friendswood, TXNTSB MIA73AM065Accident · 2 fatalClosedCessna 182H · Culebra Island, PRNTSB OAK73DVG63Accident · Serious injuriesClosedCessna T210L · Mexicali, MexicoNTSB MIA73DKG73Accident · No injuriesClosedCessna 150L · Stockbridge, GANTSB CHI73DEP56Accident · Minor injuriesClosedCessna 177 · Rhinelander, WINTSB OAK73FXQ29Accident · Minor injuriesClosedCessna 150 · S.Lke Tahoe, CANTSB OAK73AP038Accident · 1 fatalClosedPiper PA-30 · Three Rvrs, CANTSB CHI73FEV26Accident · Minor injuriesClosedPiper PA-28 · Springfield, ILNTSB DEN73FTE73Accident · No injuriesClosedCessna 337C · Aurora, CONTSB CHI73FEP51Accident · No injuriesClosedPiper PA-28 · Sturtevant, WINTSB NYC73AN137Accident · 1 fatalClosedMooney M20C · Ledyard, CTNTSB LAX73FUJ72Accident · Serious injuriesClosedAmer Avco AA-1A · Yuma, AZNTSB NYC73FNE31Accident · No injuriesClosedPiper PA-28R · Waterford, CTNTSB NYC73FHM29Accident · No injuriesClosedPiper PA-28 · Clark, NJNTSB LAX73FUQ30Accident · Minor injuriesClosedSchweizer SGS134 · Tehachapi, CANTSB CHI73AC084Accident · 2 fatalClosedPiper PA-28 · Aledo, ILNTSB MIA73FKG71Accident · Minor injuriesClosedPiper PA-28 · Gray, GANTSB OAK73DVM29Accident · Serious injuriesClosedBellanca 7GCBC · Santa Cruz, CANTSB NYC73ANA43Accident · Minor injuriesClosedPiper PA-28 · Fall River, MANTSB IAD73FIA16Accident · No injuriesClosedPiper PA-28 · Manassas, VANTSB MIA73FLG44Accident · Serious injuriesClosedCessna 150B · Columbia, SCNTSB MIA73FKT83Accident · No injuriesClosedCessna 150L · Dania, FLNTSB FTW73DQG38Accident · Minor injuriesClosedCessna 172K · Follett, TXNTSB OAK73DVA50Accident · No injuriesClosedCessna 170 · Dos Palos, CANTSB MIA73FKG70Accident · No injuriesClosedCessna 172 · Fitzgerald, GANTSB NYC73FNA42Accident · Minor injuriesClosedPiper PA-22 · Taunton, MANTSB NYC73FHA21Accident · Serious injuriesClosedPiper PA-28 · Langhorne, PANTSB LAX73FUM29Accident · 1 fatalClosedChampion 7GCBC · La Jolla, CANTSB LAX73DUJ75Accident · No injuriesClosedSchemp Cirrus · San Manuel, AZNTSB IAD73FLJ24Accident · 1 fatalClosedWhitman W-8 · Alamance, NCNTSB IAD73FIG22Accident · No injuriesClosedCessna 182P · Laurel, MDNTSB FTW73AF061Accident · 1 fatalClosedBeech V35TC · Amarillo, TXNTSB NYC73AN131Accident · 1 fatalClosedPiper PA-32 · Coraopolis, PANTSB CHI73IC083Incident · No injuriesClosedBoeing 727 · Toledo, OHNTSB MKC73FCG37Accident · No injuriesClosedBeech 35-A33 · Leawood, KSNTSB MKC73FER23Accident · Serious injuriesClosedBeech A23 · Eden Prairie, MNNTSB NYC73FHJ17Accident · Serious injuriesClosedNavion NAV-4 · N.Lindenhurst, NYNTSB NYC73DHD30Accident · No injuriesClosedPiper PA-28 · Williamstown, NJNTSB MIA73FLG43Accident · No injuriesClosedPiper PA-23 · Cameron, SCNTSB IAD73FIG23Accident · No injuriesClosedCessna 182M · Stevensville, MDNTSB OAK73AP034Accident · 4 fatalClosedCessna 320D · Tonopah, NVNTSB FTW73DRJ30Accident · No injuriesClosedPiper PA-28R · Alexandria, LANTSB MKC73DER47Accident · No injuriesClosedMooney M10 · Willmar, MNNTSB LAX73FUA39Accident · No injuriesClosedCessna 172K · Fullerton, CANTSB SEA73FTA05Accident · No injuriesClosedBellanca 7GCBC · Hammon, MTNTSB ANC73DAG79Accident · No injuriesClosedCessna 150 · Anchorage, AKNTSB MIA73DKT76Accident · No injuriesClosedMooney M20C · Ft Lauderdale, FLNTSB FTW73DPD30Accident · Minor injuriesClosedAeronca 7BCM · Bangs, TXNTSB UNK73X0109Accident · 1 fatalClosedCessna 340 · Gander, Canada