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 IAD77FA029Accident · 1 fatalClosedCessna A150L · Lovettsvile, VANTSB CHI77FET20Accident · Minor injuriesClosedCessna 172 · Plymouth, INNTSB ANC77DA035Accident · No injuriesClosedDehavilland DHC-6 · Emmonak, AKNTSB MKC77DCQ21Accident · No injuriesClosedCessna 150 · Manhattan, KSNTSB OAK77FA024Accident · 4 fatalClosedCessna 182P · Gualala, CANTSB MIA77FA038Accident · 6 fatalClosedBeech H35 · Claxton, GANTSB IAD77FIG12Accident · Serious injuriesClosedCessna 150E · Berkley Sprngs, WVNTSB FTW77FPA06Accident · Serious injuriesClosedCessna 150L · Powderly, TXNTSB MIA77FKG21Accident · No injuriesClosedCessna 150J · Savannah, GANTSB OAK77FA022Accident · 2 fatalClosedBeech 35 · Sacramento, CANTSB OAK77DVD19Accident · Minor injuriesClosedCessna T210L · Lodi, CANTSB MIA77RA036Accident · 1 fatalClosedSwearingen SA226T · Nassau, Burkina FasoNTSB IAD77FIJ05Accident · No injuriesClosedCessna 172M · Richlands, VANTSB FTW77FQG15Accident · Minor injuriesClosedBeech E50 · Midland, TXNTSB CHI77FA033Accident · 4 fatalClosedMooney M20E · St Charles, ILNTSB CHI77FEE10Accident · No injuriesClosedPiper PA-23 · Streator, ILNTSB NYC77DHD10Accident · No injuriesClosedPiper PA-28 · Atlantic City, NJNTSB LAX77FUJ33Accident · Minor injuriesClosedHicks & Shu Specl · Glendale, AZNTSB NYC77FFJ12Accident · No injuriesClosedPiper PA-23 · Rochester, NYNTSB NYC77FGT12Accident · No injuriesClosedVolksplane VP-1 · Julian, PANTSB MIA77FLD33Accident · No injuriesClosedPiper PA-24 · Clearwater, FLNTSB FTW77FRA12Accident · Serious injuriesClosedAero Comdr 100 · Huntsville, TXNTSB CHI77DEP20Accident · No injuriesClosedCessna 172 · Delavan, WINTSB NYC77FA033Accident · 1 fatalClosedMooney M20F · Johnstown, PANTSB NYC77FHD08Accident · Minor injuriesClosedCessna 150 · Hammonton, NJNTSB MIA77FLA17Accident · Serious injuriesClosedPiper PA-23 · Lake City, FLNTSB FTW77FPA05Accident · Minor injuriesClosedBellanca 17-30A · Sherman, TXNTSB LAX77DUM17Accident · Minor injuriesClosedCessna 337 · San Diego, CANTSB IAD77FLT01Accident · Serious injuriesClosedPiper PA-28 · Tiptonville, TNNTSB MIA77DLD29Accident · No injuriesClosedSchweizer SGS126 · Arcadia, FLNTSB ANC77FA030Accident · Serious injuriesClosedAero Comdr 680 FL · Savoonga, AKNTSB MKC77FA014Accident · 1 fatalClosedBeech S-35 · Sioux City, IANTSB DEN77FA025Accident · 2 fatalClosedCessna 150C · Reserve, NMNTSB ANC77DAG32Accident · Serious injuriesClosedTaylorcraft BC-12D · Kenai, AKNTSB DEN77FQA20Accident · Serious injuriesClosedBellanca 8KCAB · Albuquerque, NMNTSB MIA77FA030Accident · 2 fatalClosedGrum Amer AA1B · St Petersburg, FLNTSB IAD77FID13Accident · Serious injuriesClosedPiper PA-30 · Roanoke, VANTSB FTW77FRA10Accident · No injuriesClosedFairchild M-62-C · Houston, TXNTSB DEN77FQA23Accident · No injuriesClosedRaven S-50A · Albuquerque, NMNTSB NYC77FHM10Accident · No injuriesClosedCessna 150M · Matawan, NJNTSB NYC77FA031Accident · No injuriesClosedPiper PA-31 · Ithaca, NYNTSB MIA77FKG20Accident · No injuriesClosedChampion 7HC · Vidalia, GANTSB OAK77DVD15Accident · Minor injuriesClosedCessna 172M · Fremont, CANTSB OAK77DA017Incident · No injuriesClosedMitsubishi MU-2 · Monterey, CANTSB MIA77DLA16Accident · No injuriesClosedBeech U35B · Dog Island, FLNTSB DEN77FQA16Accident · Serious injuriesClosedBellanca 17-30 · Albuquerque, NMNTSB MKC77FTK06Accident · Serious injuriesClosedCessna 177 · Kadoka, SDNTSB DEN77FTE21Accident · Minor injuriesClosedPiper PA-28 · Brighton, CONTSB CHI77FEV11Accident · No injuriesClosedPiper PA-24 · Tolono, ILNTSB NYC77FA030Accident · 1 fatalClosedCessna 150L · Smithfield, RI