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 MKC76AK017Accident · 1 fatalClosedRyan Navion · Burwell, NENTSB NYC76AN030Accident · 3 fatalClosedBeech B95A55 · Hyannis, MANTSB NYC76DNC17Accident · No injuriesClosedCessna 150L · Bangor, MENTSB MKC76DCQ16Accident · No injuriesClosedCessna 401 · Wichita, KSNTSB LAX76AL017Accident · Serious injuriesClosedCessna 150M · Corona, CANTSB SEA76DYC15Accident · No injuriesClosedCessna 150 · Battleground, WANTSB MIA76FLD12Accident · No injuriesClosedPiper PA-28 · Orlando, FLNTSB FTW76FPD09Accident · No injuriesClosedPiper PA-28R · Denton, TXNTSB CHI76DEV13Accident · No injuriesClosedPiper PA-28R · Centralia, ILNTSB NYC76DNC15Accident · Serious injuriesClosedCessna 150F · Center Ossipee, NHNTSB MKC76FCG20Accident · Serious injuriesClosedPiper J3C · Cameron, MONTSB IAD76AI012Accident · 2 fatalClosedCessna 210J · Charlotte, NCNTSB OAK7LDVD06Accident · Minor injuriesClosedChampion 7EC · Petaluma, CANTSB OAK76DVD09Accident · Minor injuriesClosedCessna 150 · Whitethorn, CANTSB IAD76AI011Accident · 3 fatalClosedBeech B24R · Gerrardstown, WVNTSB ANC76DAG33Accident · No injuriesClosedPiper PA-20 · Moose Pass, AKNTSB OAK76DX012Accident · No injuriesClosedBriegleb BG-12 · Reno, NVNTSB DCA76AZ004Accident · 10 fatalClosedFairchild F-27B · Gambell, AKNTSB FTW76FPJ09Accident · Serious injuriesClosedBreezy CSA1 · Oklahoma City, OKNTSB CHI76FEE17Accident · Serious injuriesClosedSteen S-BOLT · Rosecrans, ILNTSB SEA76AS015Accident · 1 fatalClosedCessna 210 · Bellevue, WANTSB FTW76FPA06Accident · No injuriesClosedSchweizer SGS233 · Caddo Mills, TXNTSB CHI76DER04Accident · No injuriesClosedBensen B-8M · New Richmond, WINTSB IAD76II010Incident · No injuriesClosedPiper PA-31 · Baltimore, MDNTSB DEN76FTE21Accident · No injuriesClosedBeech B19 · Broomfield, CONTSB SEA76FYC14Accident · No injuriesClosedLuscombe 8A · Vancouver, WANTSB IAD76FID06Accident · No injuriesClosedPiper PA-23 · Petersburg, VANTSB DEN7LFTC11Accident · Minor injuriesClosedCessna T210 · Riverton, WYNTSB CHI76AC018Accident · Serious injuriesClosedRaven RX-6 · Island Lake, ILNTSB DEN7LFTE19Accident · No injuriesClosedStarduster 2 · Littleton, CONTSB ANC76AA026Accident · Minor injuriesClosedCessna 207 · Healy, AKNTSB OAK7LDVA06Accident · Minor injuriesClosedCessna 150H · Delhi, CANTSB MIA76FLD11Accident · No injuriesClosedBeech H35 · Lutz, FLNTSB MIA76AM017Accident · 1 fatalClosedCessna 150J · Windermere, FLNTSB FTW76FRG16Accident · Serious injuriesClosedCessna 182J · Austin, TXNTSB MIA76FKG17Accident · Minor injuriesClosedSchemp SD-CRS · Cordele, GANTSB FTW76DPG17Accident · No injuriesClosedCessna 150 · Mountain View, ARNTSB NYC76FFA09Accident · Minor injuriesClosedCessna 210 · Cooperstown, NYNTSB NYC76DNC11Accident · No injuriesClosedAeronca 11AC · Chebeague Is, MENTSB FTW76AF011Accident · 3 fatalClosedCessna 401 · Austin, TXNTSB LAX7LDVA05Accident · Minor injuriesClosedCessna 172A · Bakersfield, CANTSB CHI76FCA01Accident · No injuriesClosedPiper PA-24 · Jacob, ILNTSB FTW76DRJ06Accident · Minor injuriesClosedPiper PA-23 · Alexandria, LANTSB ANC76DAG23Accident · No injuriesClosedPiper PA-18 · Skwentna, AKNTSB MKC76FER20Accident · Serious injuriesClosedPiper PA-25 · Hutchinson, MNNTSB LAX76AL010Accident · 1 fatalClosedHughes 269C · Idyllwild, CANTSB CHI76DEE13Accident · No injuriesClosedTaylorcraft 19 · Princeton, ILNTSB CHI76AC015Accident · 1 fatalClosedBellanca 14-13 · Alma, MINTSB DEN7LFTE15Accident · Serious injuriesClosedPiper PA-28 · Englewood, CONTSB NYC76FNC09Accident · No injuriesClosedPiper PA-30 · Brewer, ME