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 CHI80FEC35Accident · Minor injuriesClosedCessna 182A · Richmond, MINTSB FTW80FRD61Accident · Serious injuriesClosedPietenpol Aircmp · Patterson, LANTSB SEA80FYP37Accident · Serious injuriesClosedGrum-Amer AA-1B · Coeur D'Alene, IDNTSB LAX80FA139Accident · Serious injuriesClosedCessna 402C · San Francisco, CANTSB JKR81AA000Accident · Minor injuriesClosedBoeing 727 · S.Jose, SerbiaNTSB FTW80DQG38Accident · No injuriesClosedPiper PA-22 · Odessa, TXNTSB CHI80FEI41Accident · No injuriesClosedPiper PA-38 · Mansfield, OHNTSB FTW80DRG70Accident · Minor injuriesClosedTaylorcraft BC12-D · Seguin, TXNTSB ANC80DAH07Accident · No injuriesClosedGrumman G-44 · Kodiak, AKNTSB NYC80FGM28Accident · Minor injuriesClosedFunk B75L · Slippery Rock, PANTSB MIA80FKT55Accident · No injuriesClosedPiper PA-24 · Lauderhill, FLNTSB CHI80FEE47Accident · 1 fatalClosedVari-Eze Heiman · Huntley, ILNTSB NYC80;GM29Accident · No injuriesClosedBLN Works FF-7 · Indiana, PANTSB FTW80FRG69Accident · Serious injuriesClosedCessna 172H · Stonewall, TXNTSB MIA80DLA36Accident · No injuriesClosedCessna 337 · Gainsville, FLNTSB LAX80FVG70Accident · Serious injuriesClosedCessna 414 · Sacramento, CANTSB FTW80DRD59Accident · No injuriesClosedBell 206L-1 · Intracstl Cty, LANTSB ANC80FAA22Accident · Minor injuriesClosedAnderson 01 · Fairbanks, AKNTSB CHI80FA065Accident · 4 fatalClosedPiper PA-23 · East Tawas, MINTSB NYC80IA076Incident · No injuriesClosedAerospatial SA330J · N Kingstown, RINTSB CHI80FET27Accident · 1 fatalClosedDi Stasi Bowers · Ligonier, INNTSB CHI80FEI37Accident · Serious injuriesClosedPiper PA-22 · Shelby, OHNTSB ANC80FA090Accident · Serious injuriesClosedBeech E90 · Kotzebue, AKNTSB ANC80DAG99Accident · No injuriesClosedBeech B19 · Anchorage, AKNTSB FTW80DA108Accident · No injuriesClosedSwearingen SA226 · Killeen, TXNTSB MIA80DKA09Accident · Serious injuriesClosedBensen B8M · Vega Baja, PRNTSB LAX80DVG76Accident · No injuriesClosedSchweizer 2-32 · Vacaville, CANTSB MKC80FCG41Accident · No injuriesClosedPiper PA-22 · Cassville, MONTSB DEN80FA057Accident · 5 fatalClosedPiper PA-32 · Choteau, MTNTSB DEN80FTE72Accident · Serious injuriesClosedGrum-Amer AA-5B · Boulder, CONTSB MIA80FA092Accident · 2 fatalClosedCessna 337B · Osteen, FLNTSB LAX80FVG67Accident · No injuriesClosedLuscombe 8A · Lincoln, CANTSB CHI80FEP49Accident · Minor injuriesClosedVarga 2150A · Fort Atkinson, WINTSB MIA80FA091Accident · 2 fatalClosedCessna 411A · Cape Coral, FLNTSB DEN80IA055Incident · No injuriesClosedDehavilland DHC-7 · Denver, CONTSB LAX80FUQ22Accident · No injuriesClosedCessna 421A · Lancaster, CANTSB DEN80FTM37Accident · Serious injuriesClosedGrum-Amer AA-5B · Heber City, UTNTSB ANC80FA085Accident · Minor injuriesClosedDehavnd Can DHC-2 · Mccarthy, AKNTSB MIA80FLD90Accident · No injuriesClosedPiper PA-24 · Titusville, FLNTSB LAX80DVA61Accident · No injuriesClosedCessna 172 · Visalia, CANTSB FTW80FPJ33Accident · No injuriesClosedBeech 23 · Griggs, OKNTSB CHI80FEV36Accident · No injuriesClosedCessna 337G · Bloomington, ILNTSB NYC80FA070Accident · 1 fatalClosedPiper PA-30 · Cutchogue, NYNTSB CHI80FEE42Accident · Serious injuriesClosedBede 4 · Dekalb, ILNTSB SEA80FYM54Accident · Serious injuriesClosedPiper PA-28 · Portland, ORNTSB NYC80FA069Accident · 2 fatalClosedCessna 401B · Tewksbury, MANTSB ATL80DKM23Accident · Serious injuriesClosedStarduster SA-300 · Horse Shoe, NCNTSB NYC80FFA23Accident · Serious injuriesClosedPiper J3 · Galway, NYNTSB CHI80FET23Accident · Minor injuriesClosedCessna 172M · Woodburn, INNTSB CHI80FER64Accident · No injuriesClosedCessna 150 · Ogema, MN