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 IAD77FIG23Accident · No injuriesClosedCessna 210 · Martinsburg, WVNTSB IAD77DKM26Accident · No injuriesClosedGrum Amer AA5 · Rutherfordton, NCNTSB FTW77DQG38Accident · No injuriesClosedCessna 150 · Seminole, TXNTSB DEN77FTM21Accident · Serious injuriesClosedPiper PA-28 · Beaver, UTNTSB DEN77DTM22Accident · Minor injuriesClosedPiper PA-24 · Hite, UTNTSB NYC77DNC39Accident · Serious injuriesClosedSchneider LS-1F · Bennington, VTNTSB IAD77DID23Accident · Minor injuriesClosedPiper J3C-65 · Woolwine, VANTSB FTW77FPJ28Accident · Minor injuriesClosedPiper J3C-65 · Yukon, OKNTSB CHI77DEM31Accident · No injuriesClosedSchweizer SGS2-3 · Cedar, MINTSB ANC77FA053Accident · 1 fatalClosedCessna 180F · Bethel, AKNTSB MIA77DLG21Accident · Minor injuriesClosedMooney M20C · Darlington, SCNTSB IAD77FIG29Accident · No injuriesClosedChampion 7KCAB · Ocean City, MDNTSB CHI77FEK23Accident · Minor injuriesClosedCessna 150 · Nelsonville, OHNTSB MIA77DKT51Accident · No injuriesClosedCessna 150 · Tavernier, FLNTSB LAX77DUJ65Accident · Minor injuriesClosedHughes 269B · Luke Af Base, AZNTSB CHI77FEI31Accident · No injuriesClosedCessna 150 · Chardon, OHNTSB MKC77FCG31Accident · No injuriesClosedCessna 177RG · Gardner, KSNTSB FTW77DPJ25Accident · No injuriesClosedSchweizer SGS233 · Lawton, OKNTSB CHI77FA054Accident · 4 fatalClosedMooney M20F · Port Huron, MINTSB SEA77DYM43Accident · Minor injuriesClosedCessna 150 · Troutdale, ORNTSB MIA77FKT47Accident · No injuriesClosedCessna 150 · Opa Locka, FLNTSB LAX77DUJ68Accident · No injuriesClosedCessna 182 · Page, AZNTSB FTW77DPG52Accident · No injuriesClosedCessna 182 · Waldron, ARNTSB ANC77FAG70Accident · No injuriesClosedStinson 108-1 · Anchorage, AKNTSB ANC77DAA32Accident · No injuriesClosedCessna 182 · Chandalar Camp, AKNTSB MIA77FKG40Accident · No injuriesClosedCessna 120 · Jackson, GANTSB MIA77FA063Accident · 2 fatalClosedCessna 182F · Plymouth, FLNTSB DEN77FTM20Accident · No injuriesClosedPiper PA-28 · Benjamin, UTNTSB DEN77FTC15Accident · Serious injuriesClosedAerospatial SA315B · Jackson, WYNTSB SEA77FTA25Accident · No injuriesClosedCessna T210M · Malta, MTNTSB ANC77DAA33Accident · No injuriesClosedPiper PA-22 · Tok, AKNTSB NYC77FHJ24Accident · No injuriesClosedPiper PA-32 · Montauk, NYNTSB FTW77FPM14Accident · No injuriesClosedBeech C23 · Afton, OKNTSB FTW77FPG46Accident · Serious injuriesClosedCessna 172 · Pocahontas, ARNTSB OAK77FVW22Accident · No injuriesClosedCessna 150M · Las Vegas, NVNTSB FTW77FPD30Accident · Minor injuriesClosedCessna 150M · Cleburne, TXNTSB NYC77FNA19Accident · Serious injuriesClosedCessna 207 · Vineyard Haven, MANTSB NYC77FGT16Accident · No injuriesClosedBeech A23 · Montoursville, PANTSB CHI77DEV28Accident · Minor injuriesClosedChampion 7EC · Urbana, ILNTSB MKC77DCG30Accident · Serious injuriesClosedPiper PA-22 · Leavenworth, KSNTSB MIA77FA061Accident · 1 fatalClosedPiper PA-16 · Valdosta, GANTSB IAD77FA045Accident · Serious injuriesClosedPiper PA-32 · Raleigh, NCNTSB FTW77FRA28Accident · Serious injuriesClosedErco 415-C · Texas City, TXNTSB SEA77FYM39Accident · No injuriesClosedPiper PA-28 · Hillsboro, ORNTSB LAX77DUJ61Accident · Serious injuriesClosedTailwind 1 · Tucson, AZNTSB LAX77DUJ59Accident · Minor injuriesClosedSchemp Cirrus · Skull Valley, AZNTSB IAD77FLJ19Accident · Minor injuriesClosedPiper PA-28R · Selma, NCNTSB MKC77DCJ24Accident · No injuriesClosedCessna 172 · Papillion, NENTSB FTW77DPG45Accident · No injuriesClosedPiper PA-28R · Manila, ARNTSB MKC77FER47Accident · Minor injuriesClosedCessna 150M · Crystal, MN