NTSB investigations
20,996 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 MIA72FKG93Accident · No injuriesClosedCessna 150 · Lithonia, GANTSB FTW72FRG74Accident · No injuriesClosedBeech K35 · Port Aransas, TXNTSB ANC72FAH07Accident · Serious injuriesClosedChampion 7GCBC · Ekwok, AKNTSB NYC72FGM44Accident · No injuriesClosedLuscombe 8E · Titusville, PANTSB MIA72AM113Accident · 5 fatalClosedAero Comdr 500-B · College Park, GANTSB MIA72FKW24Accident · Minor injuriesClosedCessna 150L · Hixson, TNNTSB UNK72X0108Accident · No injuriesClosedCessna 172 · Ptd.Bight, JamaicaNTSB CHI72FEE72Accident · 1 fatalClosedCassutt 11M · Naperville, ILNTSB MIA72FKT69Accident · Serious injuriesClosedPiper PA-28 · W.Hollywood, FLNTSB FTW72AF069Accident · Minor injuriesClosedPiper PA-28 · Dallas, TXNTSB CHI72DEI36Accident · No injuriesClosedCessna 172 · Toledo, OHNTSB NYC72FKM32Accident · No injuriesClosedPiper PA-12 · Rockingham, NCNTSB LAX72DUQ78Accident · Minor injuriesClosedCessna 172 · Inyokern, CANTSB FTW72DRJ23Accident · Minor injuriesClosedCessna 150J · Longview, TXNTSB CHI72AC083Accident · 1 fatalClosedShort Bros SC-7-3 · Lacrosse, WINTSB SEA72AS045Accident · 3 fatalClosedCessna 182A · Walla Walla, WANTSB MIA72FLA39Accident · Serious injuriesClosedCessna 140 · Milton, FLNTSB OAK72DVG49Accident · Minor injuriesClosedPiper PA-28 · Dunsmuir, CANTSB MIA72AM107Accident · 7 fatalClosedPiper PA-32 · Fort Payne, ALNTSB CHI72FEM60Accident · No injuriesClosedPiper PA-23 · Escanaba, MINTSB NYC72DFT09Accident · No injuriesClosedSchleicher AS-K14 · Fayetteville, PANTSB FTW72FRA46Accident · No injuriesClosedCessna 177 · Pearland, TXNTSB CHI72FEM57Accident · Serious injuriesClosedCessna 337 · Sault S.Mari, MINTSB CHI72AC079Accident · 1 fatalClosedCessna 172 · Lowell, MINTSB FTW72DRG76Accident · Serious injuriesClosedCessna 210T · Mexicali, MexicoNTSB CHI72FEM58Accident · No injuriesClosedPiper PA-24 · Battle Creek, MINTSB FTW72DPM26Accident · No injuriesClosedBell 47G · Wynona, OKNTSB CHI72FEC37Accident · No injuriesClosedNavion A · Taylor, MINTSB LAX72FUQ74Accident · No injuriesClosedCessna 150 · Goleta, CANTSB MIA72FKQ33Accident · No injuriesClosedGillam Star SA300 · Picayune, MSNTSB MIA72AM104Accident · 5 fatalClosedCessna 320E · Charleston, SCNTSB CHI72FEC33Accident · No injuriesClosedBeech D35 · Pontiac, MINTSB CHI72AC077Accident · 2 fatalClosedPiper PA-30 · Vandalia, ILNTSB MIA72AM101Accident · 4 fatalClosedSwearingen SA26AT · Nashville, TNNTSB MIA72FLA35Accident · Minor injuriesClosedPiper PA-22 · Blountstown, FLNTSB FTW72DPD33Accident · Minor injuriesClosedBeech 23 · Evant, TXNTSB OAK72FVW26Accident · Minor injuriesClosedMooney M20F · Boulder City, NVNTSB OAK72FVG46Accident · Serious injuriesClosedNavion A · Jackson, CANTSB OAK72DVG47Accident · No injuriesClosedPiper PA-28 · Lower Lake, CANTSB NYC72DFJ32Accident · No injuriesClosedPiper PA-22 · East Amherst, NYNTSB NYC72AN117Accident · Serious injuriesClosedBeech D95A · Portsmouth, VANTSB MIA72DLG32Accident · Minor injuriesClosedCessna 140 · Laurens, SCNTSB LAX72FUG62Accident · Serious injuriesClosedCessna 150 · Riverside, CANTSB DEN72DTC22Accident · Minor injuriesClosedPiper PA-28R · Gillette, WYNTSB CHI72FLQ32Accident · Serious injuriesClosedMong Sport MS-2 · Elizabethtown, KYNTSB LAX72FUJ88Accident · No injuriesClosedBell 47G3B1 · Gila Bend, AZNTSB CHI72FEA36Accident · Serious injuriesClosedCessna 150 · Greencastle, INNTSB OAK72DVG45Accident · Serious injuriesClosedCessna 150 · Paradise, CANTSB OAK72DJY18Accident · No injuriesClosedPilatus PC6-H2 · Song Lai, LaosNTSB MKC72AK056Accident · 1 fatalClosedBeech V35 · Worthington, MN