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 IAD76FGN39Accident · Minor injuriesClosedGrum Amer AA-1B · New Cumberland, WVNTSB ANC76DAA45Accident · No injuriesClosedBellanca 7GCBC · Serpentine Spg, AKNTSB ANC76AA109Accident · Serious injuriesClosedHughes 369HS · Juneau, AKNTSB MIA76DKG84Accident · No injuriesClosedAero-Comdr 600S2R · Albany, GANTSB MKC76DER76Accident · No injuriesClosedStarduster 2 · Eveleth, MNNTSB FTW76FQD30Accident · No injuriesClosedSchweizer SGS126 · Fabens, TXNTSB FTW76DRJ29Accident · No injuriesClosedPiper PA-18 · Oak Grove, LANTSB DEN76FQA53Accident · No injuriesClosedMooney M20C · Albuquerque, NMNTSB OAK76AP061Accident · 1 fatalClosedPeterson J-4 · Vacaville, CANTSB MIA76AM095Accident · 1 fatalClosedCessna 337B · Augusta, GANTSB SEA76FYG63Accident · No injuriesClosedCessna 150 · Mead, WANTSB LAX76DUJ96Accident · No injuriesClosedLuscombe 8A · Bullhead City, AZNTSB IAD76FLT14Accident · Serious injuriesClosedPiper PA-28 · Memphis, TNNTSB SEA76OO508Accident · Minor injuriesClosedPiper PA-34 · San Luis, MexicoNTSB MIA76DKG81Accident · No injuriesClosedCessna 172 · Chauncey, GANTSB DEN76FTE75Accident · Serious injuriesClosedBeech V35 · Lamar, CONTSB MKC76DCQ62Accident · No injuriesClosedPiper PA-25 · Winfield, KSNTSB ANC76DAH29Accident · Minor injuriesClosedPiper PA-12 · Skwewtna, AKNTSB DEN76DTC36Accident · Minor injuriesClosedStinson 108 · Casper, WYNTSB SEA76AS057Accident · 1 fatalClosedCessna 150L · Clatskanie, ORNTSB IAD76FLJ25Accident · No injuriesClosedCessna 402B · Wilmington, NCNTSB SEA76DYI46Accident · No injuriesClosedBell 206B · Westport, WANTSB IAD76DID31Accident · Minor injuriesClosedBowers F-BABY · Saluda, VANTSB MIA76DLG36Accident · No injuriesClosedCessna 182 · Ridgeland, SCNTSB IAD76FID30Accident · No injuriesClosedCessna 150 · Williamsburg, VANTSB NYC76FNE25Accident · No injuriesClosedBeech E18S · Simsbury, CTNTSB OAK76DVM41Accident · No injuriesClosedWeatherly 201A · Greenfield, CANTSB DCA76AZ029Accident · Serious injuriesClosedDouglas DC-9 · Philadelphia, PANTSB MKC76AK062Accident · 2 fatalClosedPiper PA-18 · Rockville, MNNTSB LAX76AL085Accident · 5 fatalClosedBeech B35 · Rubidoux, CANTSB FTW76AQG79Accident · No injuriesClosedPiper PA-32 · Wayside, TXNTSB CHI76FEE63Accident · Minor injuriesClosedCessna 150H · Sandwich, ILNTSB MKC76FCA28Accident · Serious injuriesClosedCessna 172L · Eminence, MONTSB FTW76FPG69Accident · No injuriesClosedBeech F35 · Searcy, ARNTSB OAK76FXQ50Accident · No injuriesClosedPiper PA-28R · Sparks, NVNTSB MIA76DKJ75Accident · No injuriesClosedChampion 7ECA · Goodway, ALNTSB OAK76FVW29Accident · Serious injuriesClosedPiper PA-24 · Tempiute, NVNTSB ANC76DAA41Accident · No injuriesClosedPiper PA-12 · Paxson, AKNTSB ANC76AA103Accident · No injuriesClosedCessna 185 · Vakutat, AKNTSB OAK76FVD40Accident · Serious injuriesClosedHutchinson EH-1 · Stockton, CANTSB MIA76FKJ74Accident · No injuriesClosedPiper PA-22 · Talladega, ALNTSB LAX76FUJ84Accident · Minor injuriesClosedCessna 150 · Tucson, AZNTSB CHI76AEA41Accident · Minor injuriesClosedBensen B7MC · Mooresville, INNTSB OAK76DVA70Accident · No injuriesClosedBeech B50 · Oakdale, CANTSB LAX76FUJ83Accident · No injuriesClosedPiper PA-32 · Tubac, AZNTSB CHI76FEV43Accident · 1 fatalClosedCessna A188B · Monmouth, ILNTSB FTW76DPG65Accident · No injuriesClosedGrumman G-164A · Tillar, ARNTSB NYC76FNE23Accident · Minor injuriesClosedTaylorcraft BC12-D · Norfolk, CTNTSB MIA76FKG72Accident · No injuriesClosedCessna 180 · Jefferson, GANTSB SEA76FYG54Accident · No injuriesClosedLet-Np-K L-13 · Ephrata, WA