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 MIA81FLD33Accident · Serious injuriesClosedRaven S55A · Englewood, FLNTSB FTW81DA081Accident · Minor injuriesClosedBell 206L-1 · Leeville, LANTSB DEN81DTE31Accident · Minor injuriesClosedPiper PA-28 · Hugo, CONTSB FTW81FPJ22Accident · No injuriesClosedBeech H35 · Oklahoma City, OKNTSB CHI81FA051Accident · 3 fatalClosedMitsubishi MU-2B · Alpena, MINTSB NYC81FA043Accident · 1 fatalClosedBellanca 7KCAB · North Adams, MANTSB LAX81DUJ52Accident · No injuriesClosedPiper PA-31T · Williams, AZNTSB NYC81FA041Accident · 2 fatalClosedCessna 320 · West Mifflin, PANTSB LAX81FA076Accident · No injuriesClosedHughes 369D · Las Vegas, NVNTSB SEA81FA029Accident · Serious injuriesClosedVarieze Rutan · Elma, WANTSB MKC81DCD16Accident · Serious injuriesClosedTaylorcraft BC12-D · Mystic, IANTSB CHI81FEM13Accident · No injuriesClosedMaule M4 · Weidman, WINTSB ATL81FLQ14Accident · Serious injuriesClosedCessna 172M · Monticello, KYNTSB ANC81FA043Accident · No injuriesClosedNihon YS-11A · Sand Point, AKNTSB MIA81IA065Incident · No injuriesClosedLockheed L-1011 · Ft Lauderdale, FLNTSB FTW81FA072Accident · 1 fatalClosedPiper PA-12 · Port O'Connor, TXNTSB CHI81FE113Accident · Minor injuriesClosedBellanca 17-30A · Bucyrus, OHNTSB CHI81FCA05Accident · No injuriesClosedHiller UH-12D · Cahokia, ILNTSB CHI81DEP17Accident · Minor injuriesClosedCessna 172 · Green Bay, WINTSB FTW81FA071Accident · Minor injuriesClosedCessna 414 · Shreveport, LANTSB FTW81DQD16Accident · No injuriesClosedErco 415-D · Fabens, TXNTSB ATL81DKM08Accident · Minor injuriesClosedCessna 172A · Maiden, NCNTSB SEA81FA028Accident · Minor injuriesClosedPiper PA-24 · Port Orchard, WANTSB NYC81FFJ07Accident · No injuriesClosedRockwell 114 · Akron, NYNTSB LAX81DVG25Accident · No injuriesClosedSchweizer SGS136 · Calistoga, CANTSB CHI81FER31Accident · Minor injuriesClosedPiper PA-28 · Worthington, MNNTSB LAX81FVW11Accident · 1 fatalClosedBarton Bsby MM-1 · Shoshone, CANTSB LAX81FVD19Accident · Minor injuriesClosedBlanik L-13 · Fremont, CANTSB FTW81FRJ12Accident · Minor injuriesClosedPiper PA-32 · Texarkana, ARNTSB FTW81FRG28Accident · No injuriesClosedCessna 152 · Harlingen, TXNTSB LAX81FVG24Accident · Serious injuriesClosedBede BD-5B · Winters, CANTSB LAX81FVD17Accident · Serious injuriesClosedCessna 182 · Hayward, CANTSB NYC81FA038Accident · Minor injuriesClosedCessna U206 · Wsthampton Bch, NYNTSB MKC81FCD14Accident · Serious injuriesClosedMooney M20K · Iowa City, IANTSB FTW81FA068Accident · 2 fatalClosedRobinson R22 · El Paso, TXNTSB ATL81DKJ17Accident · Minor injuriesClosedCessna 172 · Maysville, ALNTSB CHI81DEV11Accident · No injuriesClosedCessna 150 · Metropolis, ILNTSB ATL81DKM06Accident · No injuriesClosedPiper PA-28 · Shiloh, NCNTSB SEA81FYE23Accident · No injuriesClosedBeech 35 · Puyallup, WANTSB MIA81FKT42Accident · No injuriesClosedPiper PA-32 · Pompano Beach, FLNTSB MIA81FA061Accident · 2 fatalClosedAero Comdr 680 · Labelle, FLNTSB LAX81DVW10Accident · No injuriesClosedPiper PA-28R · Las Vegas, NVNTSB FTW81DPD18Accident · No injuriesClosedCessna 152 · Cross Plains, TXNTSB MIA81DLA16Accident · No injuriesClosedPiper PA-28 · Daytona Beach, FLNTSB LAX81DVA30Accident · No injuriesClosedRockwell S2R · Bakersfield, CANTSB LAX81FVW09Accident · Minor injuriesClosedCessna 172N · Boulder City, NVNTSB DEN81FA026Accident · 2 fatalClosedPiper PA-28 · Rock Springs, WYNTSB ATL81FLQ13Accident · Serious injuriesClosedPiper PA-28 · Providence, KYNTSB NYC81FHD17Accident · No injuriesClosedPiper PA-28 · Bristol, PANTSB ANC81FA037Accident · 4 fatalClosedPiper PA-31 · Galena, AK