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 NYC78DNC20Accident · No injuriesClosedCessna 206 · Warren, VTNTSB CHI78FEC21Accident · No injuriesClosedPiper PA-23 · Lake Orion, MINTSB IAD78FLJ06Accident · Serious injuriesClosedPiper PA28 · Chadbourn, NCNTSB FTW78DPG17Accident · No injuriesClosedBeech S35 · Corning, ARNTSB NYC78FNE09Accident · No injuriesClosedPiper PA-32 · Meriden, CTNTSB OAK78DVA26Accident · No injuriesClosedPiper PA-25 · Hanford, CANTSB MIA78DLG09Accident · Minor injuriesClosedCessna 172 · Greenville, SCNTSB IAD78FA044Accident · 2 fatalClosedSiai-Marche SF260 · Charlotte, NCNTSB DEN78FTE31Accident · Minor injuriesClosedCessna T210 · Pagosa Springs, CONTSB MIA78DA045Accident · 4 fatalClosedPiper PA-28 · Jekyll Island, GANTSB IAD78FLJ05Accident · No injuriesClosedCessna 150L · Jacksonville, NCNTSB FTW78FPG16Accident · Serious injuriesClosedCessna 310Q · Fort Smith, ARNTSB FTW78FA027Accident · 1 fatalClosedCessna 340 · Amarillo, TXNTSB CHI78FEC17Accident · No injuriesClosedPiper PA-28 · Pontiac, MINTSB MIA78FLG07Accident · No injuriesClosedCessna 401 · Spartanburg, SCNTSB IAD78FA041Accident · 4 fatalClosedAero Cmdr 680FL · Morrisville, NCNTSB SEA78FYK09Accident · Minor injuriesClosedCessna 210 · Sunriver, ORNTSB NYC78FGT03Accident · No injuriesClosedCessna 150K · Bloomsburg, PANTSB FTW78FRD17Accident · No injuriesClosedCessna 182A · Jackson, LANTSB DEN78FTE28Accident · Serious injuriesClosedCessna 404 · Englewood, CONTSB MKC78FCA15Accident · No injuriesClosedPiper PA-28 · Chesterfield, MONTSB MIA78FA039Accident · 1 fatalClosedCessna 310 · St Petersburg, FLNTSB LAX78FUG16Accident · Serious injuriesClosedDouglas A-26B · Chino, CANTSB CHI78DEP16Accident · No injuriesClosedCessna 150 · Kenosha, WINTSB CHI78FEK08Accident · No injuriesClosedPiper PA-31 · Bluffton, OHNTSB CHI78FEP14Accident · Minor injuriesClosedBell 47-J · Wilmot, WINTSB ANC78FA018Accident · 5 fatalClosedCessna 320D · Wrangell, AKNTSB CHI78FEI10Accident · No injuriesClosedCessna 172 · Norwalk, OHNTSB CHI78FEC12Accident · Minor injuriesClosedLuscombe 8A · Salem, MINTSB MIA78FA037Accident · 1 fatalClosedCessna 402B · Tuscaloosa, ALNTSB IAD78FLT02Accident · No injuriesClosedPiper PA-28 · Tiptonville, TNNTSB MIA78FKQ18Accident · Serious injuriesClosedBeech 35 · Stone Mountain, GANTSB FTW78FRD16Accident · No injuriesClosedPiper PA-28R · Plaquemine, LANTSB CHI78FEM09Accident · No injuriesClosedBeech 58 · Freeland, MINTSB MIA78DLO22Accident · Serious injuriesClosedBeech AB35 · Ocoee, FLNTSB IAD78IA036Incident · No injuriesClosedBeech TC45J · Norfolk, VANTSB NYC78FHJ12Accident · No injuriesClosedCessna 150 · Ronkonkoma, NYNTSB ANC78FA014Accident · Serious injuriesClosedPiper PA-23 · Umiat, AKNTSB CHI78FEK07Accident · No injuriesClosedPiper PA-28 · Columbus, OHNTSB MKC78DCG13Accident · No injuriesClosedPiper PA-28 · Liberty, MONTSB MIA78FKG14Accident · Serious injuriesClosedPitts Spcl S-1 · Newnan, GANTSB CHI78FEX08Accident · No injuriesClosedCessna 421B · Columbus, INNTSB CHI78FET08Accident · Minor injuriesClosedPiper PA-28 · South Bend, INNTSB LAX78DUJ22Accident · No injuriesClosedPiper PA-28 · Lake Havasu, AZNTSB SEA78DYP07Accident · No injuriesClosedCessna 152 · Mead, WANTSB IAD78DLQ08Accident · No injuriesClosedMitsubishi MU-2 · Hawesville, KYNTSB IAD78FA032Accident · Serious injuriesClosedBeech C45H · New Castle, DENTSB CHI78FA016Accident · No injuriesClosedLear Jet 24D · Cincinnati, OHNTSB ANC78DA010Accident · No injuriesClosedPiper PA-31 · Scammon Bay, AKNTSB SEA78FYP09Accident · Serious injuriesClosedTaylorcraft BC12D · Othello, WA