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 MIA73AM003Accident · Serious injuriesClosedCessna 150 · Jacksonville, FLNTSB OAK72DVA87Accident · No injuriesClosedSchweizer SGS2-3 · Piedra, CANTSB FTW72FPJ44Accident · Minor injuriesClosedCessna 150 · Weatherford, OKNTSB FTW72DQD32Accident · Minor injuriesClosedRollander LS-1C · Toyah, TXNTSB CHI72FEE85Accident · 1 fatalClosedCessna T210L · Moline, ILNTSB NYC72AN167Accident · 2 fatalClosedCessna 310 · Reading, PANTSB OAK72FVW33Accident · No injuriesClosedCessna 150J · Goldfield, NVNTSB MIA72IM144Incident · No injuriesClosedBeech 65-A80 · Columbia, SCNTSB CHI72FEP51Accident · Minor injuriesClosedPiper J3C-65 · Fond Du Lac, WINTSB NYC72DNA48Accident · Minor injuriesClosedPiper PA-12 · Falmouth, MANTSB NYC72AN163Accident · 4 fatalClosedBell 206A · New Cumberland, PANTSB NYC72DHD44Accident · No injuriesClosedCessna 150 · Laurel, DENTSB MIA72AM142Accident · 5 fatalClosedDehavilland DH114 · Ponce, PRNTSB NYC73AN016Accident · Serious injuriesClosedNihon YS-11A · Washington, DCNTSB MIA72IM138Incident · No injuriesClosedLockheed 1011 · Miami, FLNTSB OAK72AP044Accident · 1 fatalClosedAlon A-2 · Central Vly, CANTSB CHI72AC101Accident · 1 fatalClosedErco 415-C · Fremont, OHNTSB NYC72AN156Accident · Minor injuriesClosedBell 206A · Dingmans Ferry, PANTSB LAX72FVM37Accident · No injuriesClosedBeech A35 · Paso Robles, CANTSB OAK72FVG76Accident · 1 fatalClosedCessna 150 · San Andreas, CANTSB MKC72DCA31Accident · No injuriesClosedCessna 150 · Scott City, MONTSB NYC72FLJ35Accident · No injuriesClosedBellanca 14-13 · Goldsboro, NCNTSB NYC72DHM57Accident · No injuriesClosedSchweizer SGS233 · Wurtsboro, NYNTSB NYC72FFJ42Accident · Minor injuriesClosedCessna 177 · Cortland, NYNTSB NYC72DHA40Accident · No injuriesClosedSchleicher KA-6 · Kunkletown, PANTSB CHI72FEE81Accident · No injuriesClosedCessna 150 · Joliet, ILNTSB MKC72FER64Accident · Serious injuriesClosedLuscombe 8A · Circle Pines, MNNTSB CHI73FET04Accident · No injuriesClosedCessna 150 · Valparaiso, INNTSB CHI72FEG39Accident · No injuriesClosedAmerican AA-5 · Harrison, OHNTSB LAX72FUM28Accident · 1 fatalClosedPiper J3C-65 · Carlsbad, CANTSB LAX72FJA41Accident · Minor injuriesClosedCessna 170B · Torrance, CANTSB SEA72DYA39Accident · No injuriesClosedCessna 172 · Fort Hall, IDNTSB OAK72FVD51Accident · Serious injuriesClosedAmer Avco AA-1 · Newark, CANTSB CHI72AC098Accident · 1 fatalClosedSchleicher AS-K13 · No.Canton, OHNTSB SEA72FYG48Accident · Serious injuriesClosedPiper PA-28 · Curlew, WANTSB FTW72AF083Accident · No injuriesClosedBeech 65-B80 · Baton Rouge, LANTSB OAK72DVG67Accident · No injuriesClosedPiper PA-18A · Lincoln, CANTSB NYC72DHD42Accident · No injuriesClosedPiper PA-28 · Laurel, DENTSB FTW72FRA60Accident · Minor injuriesClosedBeech P35 · Brenham, TXNTSB CHI72FEC44Accident · Minor injuriesClosedCessna 182C · Saline, MINTSB MIA72FLA48Accident · No injuriesClosedPiper PA-28 · St.Augustine, FLNTSB LAX72AL060Accident · 2 fatalClosedPiper PA-23 · So.Lk.Tahoe, CANTSB DEN72FQD27Accident · No injuriesClosedPiper PA-28 · Anthony, NMNTSB SEA72AS052Accident · 5 fatalClosedCessna 182J · Port Angeles, WANTSB DCA72AZ011Accident · 4 fatalClosedDouglas DC-9 · Ft.Worth, TXNTSB LAX72FUQ89Accident · Serious injuriesClosedPiper PA-32 · Lake Hughes, CANTSB CHI72FEK15Accident · No injuriesClosedPiper PA-28 · Delaware, OHNTSB CHI72AC095Accident · 3 fatalClosedCessna 310D · Cleveland, OHNTSB OAK73O0001Accident · No injuriesClosedCessna 150 · Kadena Ab, JANTSB NYC72DHA39Accident · Minor injuriesClosedSchleicher KA-6 · Dingmans Ferry, PA