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 MKC78DCA36Accident · Minor injuriesClosedCessna 182 · Lewistown, MONTSB LAX78FUJ76Accident · No injuriesClosedCessna T210L · Flagstaff, AZNTSB DEN78FTF70Accident · No injuriesClosedPeer JR ACE E · Mack, CONTSB CHI78FEC38Accident · Serious injuriesClosedPiper PA-28 · Salem, MINTSB MIA78FA100Accident · 1 fatalClosedBeechcraft 65-80 · Mobile, ALNTSB IAD78FIA13Accident · Minor injuriesClosedBalloon WKS Frfy 7 · Catlett, VANTSB FTW78FA052Accident · 1 fatalClosedBeech 35-B33 · Mineral Wells, TXNTSB IAD78DKM14Accident · No injuriesClosedPiper PA-28 · Greensboro, NCNTSB MKC78FCG39Accident · Serious injuriesClosedBeech A36 · Olathe, KSNTSB FTW78FPM18Accident · No injuriesClosedCessna 150 · Tulsa, OKNTSB DEN78FTC30Accident · No injuriesClosedPiper PA-28 · Casper, WYNTSB DEN78FTC27Accident · No injuriesClosedGrum Amer AA-5A · Evanston, WYNTSB CHI78FCA01Accident · Minor injuriesClosedNavion NAV-4 · Bethalto, ILNTSB CHI78FA045Accident · 3 fatalClosedPiper PA-23 · Belleville, ILNTSB CHI78DEE55Accident · Serious injuriesClosedSemco AX7 · Mchenry, ILNTSB OAK78FVG53Accident · 3 fatalClosedPiper PA-24 · Ruth, CANTSB CHI78FEC36Accident · No injuriesClosedCessna 172 · Detroit, MINTSB MKC78FCQ29Accident · No injuriesClosedPiper PA-24 · Wichita, KSNTSB MIA78FKJ53Accident · Serious injuriesClosedBeech 100 · Muscle Shoals, ALNTSB LAX78FUJ70Accident · 1 fatalClosedNord Stampe SV4C · Phoenix, AZNTSB CHI78DEP39Accident · No injuriesClosedMustang II · East Troy, WINTSB CHI78FEM22Accident · No injuriesClosedCessna 150 · Battle Creek, MINTSB NYC78FA064Accident · Minor injuriesClosedBeech 18 · Windsor Locks, CTNTSB MIA78DLD55Accident · No injuriesClosedCessna 172 · Lakeland, FLNTSB CHI78DEV39Accident · No injuriesClosedPiper PA-28 · Mclean, ILNTSB MKC78DER65Accident · Minor injuriesClosedSchweizer 2-33 · White Bear Lk, MNNTSB MKC78DCD34Accident · No injuriesClosedBell 47J-2 · Burlington, IANTSB LAX78FUQ34Accident · No injuriesClosedBeech P35 · Santa Paula, CANTSB CHI78FCA02Accident · Serious injuriesClosedPiper PA-16 · Columbia, ILNTSB MIA78DKJ51Accident · Serious injuriesClosedSchleicher ASW15 · Pensacola, FLNTSB NYC78FHD15Accident · Minor injuriesClosedPiper PA-28 · Bristol, PANTSB ANC78DAG74Accident · No injuriesClosedCessna 180A · Anchorage, AKNTSB UNK78X0126Accident · 1 fatalClosedPiper PA22 · Arramberri, MexicoNTSB OAK78FVG48Accident · Minor injuriesClosedCessna 172 · Angels Camp, CANTSB MKC78FER53Accident · No injuriesClosedPiper PA-12 · St Cloud, MNNTSB MKC78FCA29Accident · No injuriesClosedStits SA7D · Creve Coeur, MONTSB MIA78FKJ49Accident · No injuriesClosedCessna 150 · Auburn, ALNTSB MIA78DLD53Accident · No injuriesClosedRaven RX-6 · Tampa, FLNTSB LAX78DUJ67Accident · No injuriesClosedBell 47G3B1 · Whiteriver, AZNTSB UNK78X0125Accident · Minor injuriesClosedCessna 172 · Off Coast, KSNTSB NYC78FNA29Accident · 1 fatalClosedSchweizer 233A · Plymouth, MANTSB NYC78DFJ23Accident · No injuriesClosedCessna 150 · Richland, NYNTSB SEA78FA036Accident · 1 fatalClosedCessna 182A · Featherville, IDNTSB LAX78FUA17Accident · Serious injuriesClosedCessna T337C · Fullerton, CANTSB ANC78FAA22Accident · Minor injuriesClosedMaule M-4 · North Pole, AKNTSB SEA78FYA11Accident · No injuriesClosedPiper PA-28R · Hailey, IDNTSB MKC78DTK21Accident · No injuriesClosedCessna 172 · Isabel, SDNTSB MKC78FA046Accident · 1 fatalClosedPiper PA-28 · Omaha, NENTSB IAD78IA071Incident · No injuriesClosedPiper PA-32R · Chattanooga, TNNTSB ANC78DAG70Accident · Serious injuriesClosedLuscombe 8F · Homer, AK