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 MKC79FCG06Accident · No injuriesClosedPiper PA-31 · Marshall, MONTSB MIA79DKJ03Accident · No injuriesClosedCessna 170B · Huntsville, ALNTSB DEN78DQA05Accident · No injuriesClosedFirefly 6B · Albuquerque, NMNTSB OAK79DVA06Accident · No injuriesClosedCessna 150 · Turlock, CANTSB MKC79DCG05Accident · No injuriesClosedAeronca 7AC · Corning, MONTSB FTW78DA003Accident · Minor injuriesClosedWaco VKS-7 · Tahlequah, OKNTSB DEN79FTM01Accident · No injuriesClosedCessna P210N · Ogden, UTNTSB ANC79FA004Accident · 1 fatalClosedDehavnd Can DHC-6 · Barrow, AKNTSB LAX79FUA01Accident · Serious injuriesClosedCessna 150H · Long Beach, CANTSB IAD79FIA01Accident · No injuriesClosedCessna 172 · Woodbridge, VANTSB FTW79FPA02Accident · No injuriesClosedPiper PA-22 · Maybank, TXNTSB NYC79FHD02Accident · Minor injuriesClosedRyan ST-3KR · Albion, NJNTSB IAD79IA003Incident · No injuriesClosedCessna 404 · Covington, KYNTSB NYC79FGM03Accident · Serious injuriesClosedExprmntl KR-2 · Belle Vernon, PANTSB SEA79FTI01Accident · Serious injuriesClosedPiper PA-28 · Belgrade, MTNTSB NYC79FNA03Accident · No injuriesClosedPiper J3 · Merrimac, MANTSB FTW79FA001Accident · 1 fatalClosedCessna 172 · Bridgeport, TXNTSB NYC79FA002Accident · 1 fatalClosedBoeing E-75 · East Gramby Ct, CTNTSB MKC78FCG02Accident · Serious injuriesClosedPiper PA-32 · Columbia, MONTSB IAD79DLQ01Accident · No injuriesClosedCessna 150 · Campbellsville, KYNTSB NYC79FFJ06Accident · 1 fatalClosedFly Baby JD-1 · Java Center, NYNTSB SEA78FYM53Accident · No injuriesClosedBellanca 7ECA · Hillsboro, ORNTSB NYC78DHA40Accident · No injuriesClosedSchweitzer 1-35C · Kutztown, PANTSB LAX78FUG57Accident · Minor injuriesClosedWalker-Rand KR-1 · Corona, CANTSB LAX78DVA87Accident · No injuriesClosedGrumman G-164B · Shafter, CANTSB DEN78FQA63Accident · Serious injuriesClosedPiper PA-28 · Aztec, NMNTSB SEA78DYE39Accident · Minor injuriesClosedCessna 172 · Seattle, WANTSB NYC78FA099Accident · No injuriesClosedPiper PA-28 · Beaver Falls, PANTSB FTW78FA086Accident · 3 fatalClosedPiper PA-28 · Richland Hills, TXNTSB IAD78DKM26Accident · No injuriesClosedStarduster SA-100 · Franklinville, NCNTSB FTW78FRA41Accident · No injuriesClosedPiper PA-28 · Houston, TXNTSB CHI78FEX43Accident · Minor injuriesClosedCessna 150H · Monticello, INNTSB OAK78DVA84Accident · No injuriesClosedCessna 172 · Coalinga, CANTSB NYC78DFJ42Accident · No injuriesClosedCessna 172 · Wellsville, NYNTSB FTW78DQG51Accident · Minor injuriesClosedCessna 182P · Midland, TXNTSB DCA78AA024Accident · 6 fatalClosedBeech D18S · San Juan, PRNTSB DCA78AA023Accident · 137 fatalClosedBoeing 727 · San Diego, CANTSB MIA78FKJ94Accident · Serious injuriesClosedEnstrom F-28 · Brookwood, ALNTSB LAX78FA079Accident · 2 fatalClosedCessna 182M · Santa Barbara, CANTSB FTW78FA084Accident · Serious injuriesClosedGrumman G-159 · Houston, TXNTSB IAD78FLQ36Accident · No injuriesClosedCessna T210M · Owensboro, KYNTSB CHI78FEG18Accident · No injuriesClosedAeronca 11AC · Lebanon, OHNTSB CHI78FCA03Accident · No injuriesClosedCessna 150M · Cahokia, ILNTSB ANC79DAG09Accident · Minor injuriesClosedPiper PA-11 · Kenai, AKNTSB NYC78FHA35Accident · No injuriesClosedCessna 150 · Rock Hill, NJNTSB NYC78FA097Accident · 1 fatalClosedCessna 172M · Windsor Locks, CTNTSB IAD78FLQ33Accident · Serious injuriesClosedPiper J3C · Lebanon, KYNTSB IAD78FA111Accident · No injuriesClosedPiper PA-31 · Blountville, TNNTSB OAK78FA054Accident · 2 fatalClosedGrum Amer AA-1C · Bear Valley, CANTSB OAK78DXQ49Accident · No injuriesClosedCessna 172 · Hawthorne, NV