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 SEA77DYA36Accident · No injuriesClosedCessna 180J · Dubois, IDNTSB MKC77DER84Accident · No injuriesClosedPiper PA-28 · Starbuck, MNNTSB ANC77DAA57Accident · Serious injuriesClosedPiper PA-18 · Ft.Yukon, AKNTSB MIA77FLG37Accident · Minor injuriesClosedCessna 305A · Aiken, SCNTSB FTW77FRA34Accident · 1 fatalClosedBoeing A75N1 · Tomball, TXNTSB CHI78FET35Accident · 1 fatalClosedPiper PA-18 · Benton Harbor, MINTSB CHI77FEI40Accident · Minor injuriesClosedCessna 150 · Kelleys Is, OHNTSB MIA77FKT77Accident · Minor injuriesClosedCessna 150 · Ft Lauderdale, FLNTSB DEN77FTC30Accident · No injuriesClosedCessna 150 · Bill, WYNTSB NYC77IA097Incident · No injuriesClosedMorane 235E · Plymouth, MANTSB ANC77DAH41Accident · No injuriesClosedPiper PA-12 · Anchorage, AKNTSB ANC77DAH25Accident · No injuriesClosedPiper PA-18 · Homer, AKNTSB CHI77FEK32Accident · No injuriesClosedPiper PA-28 · Columbus, OHNTSB FTW77FPJ35Accident · No injuriesClosedPiper PA-28 · Oklahoma City, OKNTSB NYC77DHD31Accident · No injuriesClosedCessna 150 · Blue Bell, PANTSB MIA77DKG80Accident · No injuriesClosedCessna 140 · Blairsville, GANTSB SEA77DYA35Accident · No injuriesClosedHughes 369D · Etna, WYNTSB MKC77DCD47Accident · No injuriesClosedBeech B19 · Akron, IANTSB CHI77FEM42Accident · Serious injuriesClosedBenson Gyro · Montague, MINTSB NYC77FA096Accident · 1 fatalClosedLake LA-4 · Greenville, MENTSB CHI77FET36Accident · No injuriesClosedPiper PA-28 · Coldwater, MINTSB NYC77FNE35Accident · Minor injuriesClosedCessna 177R · Stratford, CTNTSB SEA77DYP46Accident · No injuriesClosedCessna 182 · Walla Walla, WANTSB OAK77DVG64Accident · No injuriesClosedCessna 340 · Woodland, CANTSB MKC77DCD45Accident · No injuriesClosedCessna 177 · Rock Rapids, IANTSB MIA77FLA53Accident · Serious injuriesClosedPiper PA-23 · Valdosta, GANTSB LAX77FA070Accident · 1 fatalClosedPiper PA-23 · Gorman, CANTSB MIA77FLD81Accident · No injuriesClosedPiper PA-28 · Crystal River, FLNTSB LAX77FUJ98Accident · No injuriesClosedAero Comdr S2R · Stanfield, AZNTSB FTW77FRG67Accident · No injuriesClosedCessna 150 · Killeen, TXNTSB DEN77FQA52Accident · Minor injuriesClosedPiper PA-28 · Aztec, NMNTSB FTW77DPG81Accident · No injuriesClosedPiper PA-25 · Piggott, ARNTSB ANC77DAH24Accident · No injuriesClosedPiper PA-18 · Anchorage, AKNTSB NYC77FA093Accident · 1 fatalClosedPiper PA-28 · Duanesburg, NYNTSB MIA77DKG71Accident · No injuriesClosedBellanca 7KACB · Tunnel Hill, GANTSB ANC78DAH09Accident · 1 fatalClosedTaylorcraft BC-12D · Red Devil Lake, AKNTSB OAK77FVW31Accident · Serious injuriesClosedCessna 210 · Las Vegas, NVNTSB CHI77FA070Accident · Minor injuriesClosedBeech C-45H · Ypsilanti, MINTSB MKC77FCQ56Accident · No injuriesClosedBeech T34A · Johnson, KSNTSB SEA77FTA29Accident · Serious injuriesClosedPiper PA-18 · Wyola, MTNTSB OAK77FVM26Accident · No injuriesClosedPiper PA-34 · Palo Alto, CANTSB LAX77DUM36Accident · No injuriesClosedCessna 175 · Calipatria, CANTSB NYC77FA088Accident · 4 fatalClosedBeech F35 · North Wales, PANTSB MKC77FCG51Accident · No injuriesClosedBeech A23-19 · Lyndon, KSNTSB CHI77FEI37Accident · No injuriesClosedCessna 150 · Wellington, OHNTSB NYC77FGM39Accident · No injuriesClosedBlumfeldt Sport · Washington, PANTSB DEN77FQA51Accident · Serious injuriesClosedPiper PA-28 · Albuquerque, NMNTSB OAK77FA050Accident · 2 fatalClosedSkyvan SC-7 · Kailua Kona, HINTSB NYC77FNE33Accident · No injuriesClosedCessna 180 · Waterford, CTNTSB LAX77DUK01Accident · No injuriesClosedCessna 150 · Roosevelt Lk, AZ