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 SEA77FYK14Accident · No injuriesClosedCessna 172M · Days Creek, ORNTSB SEA77FA039Accident · 4 fatalClosedPiper PA-28 · Spokane, WANTSB SEA77FYE21Accident · No injuriesClosedAmer Avco AA-1B · Silvana, WANTSB SEA77FYA21Accident · No injuriesClosedPiper PA-28 · Nampa, IDNTSB OAK77DVG41Accident · No injuriesClosedCessna 172 · Jackson, CANTSB NYC77DHA22Accident · No injuriesClosedPiper PA-28 · Avoca, PANTSB MKC77DCQ39Accident · No injuriesClosedPiper PA-28 · Yates Center, KSNTSB OAK77DXQ25Accident · Minor injuriesClosedSchweizer 1-35 · Dayton, NVNTSB CHI77FEC30Accident · Serious injuriesClosedPiper PA-22 · Carleton, MINTSB UNK77X0106Accident · No injuriesClosedCessna 150 · Burlington, NCNTSB DEN77FTE55Accident · No injuriesClosedPiper PA-18 · Colorado Spgs, CONTSB CHI77FA048Accident · 1 fatalClosedBeech E18S · Springfield, OHNTSB NYC77FGT14Accident · Minor injuriesClosedSchneider LS-1 · Fairfield, PANTSB MKC77FCA22Accident · No injuriesClosedPiper PA-28 · St Charles, MONTSB MKC77DCJ22Accident · No injuriesClosedBell 206B · Wahoo, NENTSB MIA77FKJ43Accident · Serious injuriesClosedBellanca 8GCBC · Foley, ALNTSB DEN77FTE53Accident · No injuriesClosedCessna 206 · Glenwood Spgs, CONTSB LAX77DUJ53Accident · Minor injuriesClosedCessna TU206F · Grand Canyon, AZNTSB CHI77FEC28Accident · Minor injuriesClosedLuscombe 8A · Carleton, MINTSB FTW77FA058Accident · 3 fatalClosedCessna 185 · Houma, LANTSB OAK77DVG39Accident · Minor injuriesClosedPiper PA-28 · Sacramento, CANTSB LAX77DUQ34Accident · No injuriesClosedCessna 172 · Simi Valley, CANTSB SEA77FYK13Accident · No injuriesClosedLuscombe 8A · Creswell, ORNTSB MKC77DTK22Accident · No injuriesClosedCessna 172 · Ethan, SDNTSB OAK77FVW16Accident · Minor injuriesClosedBeech C-45G · Beatty, NVNTSB IAD77DLJ16Accident · No injuriesClosedPiper PA-28 · Southport, NCNTSB LAX77FA044Accident · No injuriesClosedCessna 150M · Van Nuys, CANTSB FTW77DRD27Accident · Minor injuriesClosedPiper PA 28 · Free Mason Is., LANTSB CHI77FA044Accident · 1 fatalClosedCessna 172 · East Dundee, ILNTSB SEA77FTA18Accident · No injuriesClosedPiper PA-25 · Brockway, MTNTSB IAD77FIG20Accident · Minor injuriesClosedSchweizer 1-26 · Frostburg, MDNTSB OAK77FA033Accident · No injuriesClosedCessna 310F · Watsonville, CANTSB NYC77FA058Accident · Serious injuriesClosedPiper PA-30 · Plymouth, MANTSB MIA77DKG29Accident · No injuriesClosedPiper PA-22 · Newnan, GANTSB MIA77FKQ15Accident · No injuriesClosedGrumman G-164B · Pugh City, MSNTSB CHI77FEK20Accident · Minor injuriesClosedHiller UH-12E · Columbus, OHNTSB ANC77FAG58Accident · Minor injuriesClosedCessna 180 · Wasilla, AKNTSB NYC77DNC32Accident · No injuriesClosedSchweizer SGS233 · Salem, NHNTSB NYC77DFA24Accident · No injuriesClosedStinson 108 · Potsdam, NYNTSB MIA77DKJ37Accident · No injuriesClosedBell 47D1 · Ozark, ALNTSB CHI77FEG18Accident · No injuriesClosedPiper PA-18 · Mcarthur, OHNTSB CHI77DET14Accident · No injuriesClosedLet-Np-K L-13 · Kendallville, INNTSB SEA77FYK06Accident · No injuriesClosedCessna 182 · Burns, ORNTSB MKC77FTG05Accident · Serious injuriesClosedCessna 172 · Stanton, NDNTSB IAD77DID19Accident · No injuriesClosedCessna 177 · Waynesboro, VANTSB DEN73DTE43Accident · No injuriesClosedCessna 140A · Calhan, CONTSB DEN77FTE42Accident · No injuriesClosedSchwiezer SGS233 · Boulder, CONTSB DEN77FTC14Accident · Serious injuriesClosedPiper PA-28R · Thayne, WYNTSB ANC77FA043Accident · 1 fatalClosedBeech C-23 · Dan Creek, AKNTSB MIA77IA057Incident · No injuriesClosedDouglas DC-8 · Miami, FL