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 OAK71DVG02Accident · Minor injuriesClosedChampion 7KCAB · Platina, CANTSB OAK71AP003Accident · 4 fatalClosedBeech 35-C33 · Minden, NVNTSB MKC71FCG05Accident · No injuriesClosedCessna 177 · Elkton, MONTSB LAX71DUM06Accident · No injuriesClosedBell 47G5 · Imperial, CANTSB IAD71FIJ05Accident · No injuriesClosedCessna 182A · Morgantown, WVNTSB OAK71FVA08Accident · 2 fatalClosedConvair PBY-6A · Columbia, CANTSB NYC71DFM11Accident · Serious injuriesClosedSchweizer 2-22 · Barre, MANTSB MIA71FKW02Accident · Minor injuriesClosedCessna 140 · Powell, TNNTSB MIA71DLA03Accident · No injuriesClosedBeech A23 · Carabelle, FLNTSB FTW71FRA06Accident · Minor injuriesClosedBeech B50 · Friendswood, TXNTSB NYC71FHM01Accident · No injuriesClosedPiper PA-28 · Flanders, NJNTSB CHI71DGD21Accident · No injuriesClosedPiper PA-28 · N.Bass Islnd, OHNTSB NYC71FHG01Accident · No injuriesClosedAmer Avco AA-1 · Carlisle, PANTSB MKC71DCA03Accident · No injuriesClosedLuscombe 8E · House Springs, MONTSB NYC71FHA02Accident · No injuriesClosedCessna 310H · Princeton, NJNTSB LAX71FUA01Accident · No injuriesClosedPiper PA-28 · Long Beach, CANTSB MIA71DKD02Accident · No injuriesClosedCessna 150 · Millington, TNNTSB FTW71FQG13Accident · Minor injuriesClosedTaylorcraft BC12-D · Gruver, TXNTSB SEA71FWD03Accident · 1 fatalClosedVancraft GC-1 · Olympia, WANTSB MIA71AM005Accident · 1 fatalClosedBeech 95-C55 · Pompano Beach, FLNTSB LAX71FUD01Accident · Minor injuriesClosedBeech 56TC · Hawthorne, CANTSB SEA71DWA05Accident · No injuriesClosedHiller Acft UH-12A · Maupin, ORNTSB SEA70DWG03Accident · No injuriesClosedBell 47G · Conconully, WANTSB CHI71DDJ04Accident · No injuriesClosedCessna 150 · Platteville, WINTSB MIA71DKG04Accident · No injuriesClosedPiper PA-24 · Marietta, GANTSB IAD71DIJ01Accident · No injuriesClosedChampion 7-FC-3 · Ripley, WVNTSB NYC71DHD05Accident · No injuriesClosedCessna 150 · Moorestown, NJNTSB CHI71FBA01Accident · No injuriesClosedCessna 172 · Orleans, INNTSB MIA71DKC01Accident · No injuriesClosedMustang II · St Simons Isl, GANTSB DEN71DXA01Accident · Minor injuriesClosedCessna 182 · Aladdin, WYNTSB FTW71DRD02Accident · Minor injuriesClosedCessna 180H · Houma, LANTSB FTW71DPJ06Accident · Minor injuriesClosedCessna 150 · Duncan, OKNTSB CHI71DDW01Accident · No injuriesClosedPiper PA-28 · Dundee, MINTSB FTW71DQG01Accident · No injuriesClosedCessna 172K · Sterling City, TXNTSB CHI71FGD17Accident · No injuriesClosedBeech E35 · Cleveland, OHNTSB MIA71DLD02Accident · No injuriesClosedSchleicher KA-6CR · Apopka, FLNTSB FTW71FRG02Accident · Serious injuriesClosedPiper PA-22 · Sabinal, TXNTSB DEN71DXD02Accident · No injuriesClosedSchweizer SGS126 · Walsenburg, CONTSB CHI71DDJ02Accident · Minor injuriesClosedCessna 180F · Friendship, WINTSB OAK71AVG01Accident · Minor injuriesClosedLuscombe 8A · Williams, CANTSB IAD71AI002Accident · 2 fatalClosedShort Bros SC7-3 · Washington, DCNTSB LAX70DUJ46Accident · No injuriesClosedBeech 35S · Tucson, AZNTSB MKC70DCG36Accident · Minor injuriesClosedPiper PA-28 · Missouri City, MONTSB ANC70FAG32Accident · Minor injuriesClosedPiper PA-22 · Cooper Lndg, AKNTSB NYC70DFD22Accident · No injuriesClosedSchweizer 2-33 · Shirley, MANTSB DEN70FXD44Accident · Serious injuriesClosedCessna 172K · Littleton, CONTSB CHI70DDJ26Accident · No injuriesClosedCessna 180 · Lone Rock, WINTSB SEA70DDG14Accident · No injuriesClosedCessna 172 · Kremlin, MTNTSB SEA70AS048Accident · 1 fatalClosedCessna 182 · Shoshone, IDNTSB NYC70DHA14Accident · No injuriesClosedPiper PA-23 · Manville, NJ