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 LAX77FUQ02Accident · No injuriesClosedPiper PA-22 · Lancaster, CANTSB DEN76FTE04Accident · Minor injuriesClosedPiper PA-32 · Eads, CONTSB DEN77DTE05Accident · No injuriesClosedCessna 172E · Colorado Spgs, CONTSB IAD77DIJ01Accident · No injuriesClosedCessna 310K · Weston, WVNTSB NYC77FA003Accident · 1 fatalClosedAeronca 15AC · Erwinna, PANTSB LAX77FUQ01Accident · Minor injuriesClosedCessna 320 · Oxnard, CANTSB MKC77FER02Accident · No injuriesClosedBellanca 17-30 · Lake Elmo, MNNTSB IAD77FA004Accident · No injuriesClosedPiper PA-32R · Wilmington, NCNTSB FTW77DA003Accident · 1 fatalClosedPitts Spcl S-1S · Durant, OKNTSB MKC77FCG02Accident · Minor injuriesClosedMarschel T-18 · Leawood, KSNTSB MKC77DTK03Accident · Minor injuriesClosedPiper PA-22 · Freeman, SDNTSB SEA77FA002Accident · 1 fatalClosedGlobe GC-1B · Hood River, ORNTSB MKC76FCQQ1Accident · No injuriesClosedErco 415-C · St Marys, KSNTSB MIA77FLD05Accident · Minor injuriesClosedBeech 35 · Merritt Island, FLNTSB FTW76FPA01Accident · No injuriesClosedCessna 150 · Bonham, TXNTSB LAX77DUJ06Accident · No injuriesClosedGrum Amer AA-5B · Toyei, AZNTSB IAD77FA003Accident · Minor injuriesClosedBeech E18S · Blountville, TNNTSB FTW77FA002Accident · 3 fatalClosedMooney M20C · Houma, LANTSB DEN77DTM01Accident · No injuriesClosedCessna 172H · Parowan, UTNTSB FTW77FA001Accident · 2 fatalClosedCessna 150H · Claude, TXNTSB SEA77DYI01Accident · No injuriesClosedCessna 120 · Crane, ORNTSB IAD77FA001Accident · 1 fatalClosedCessna 182 · Hudson, KYNTSB UNK77X0100Accident · Minor injuriesClosedPiper PA-22 · Coral, MINTSB IAD76DLQ33Accident · Minor injuriesClosedDehavilland MK23 · Chavies, KYNTSB ANC76AAH87Accident · No injuriesClosedDehavilland DHC-3 · Eureka, AKNTSB MKC76AK083Accident · 2 fatalClosedN. American AT-6G · Beatrice, NENTSB DEN76AD074Accident · 6 fatalClosedPiper PA-23 · Steamboat Spgs, CONTSB DCA76AZ039Accident · 11 fatalClosedGrumman G-1159 · Hot Springs, VANTSB NYC76FGM52Accident · No injuriesClosedCessna 150F · Cooperstown, PANTSB DEN76FQA64Accident · Minor injuriesClosedStinson 108-3 · Albuquerque, NMNTSB FTW76FPM31Accident · No injuriesClosedCessna 150 · Yanush, OKNTSB FTW76DRG94Accident · No injuriesClosedAeronca 7ECA · Brackettville, TXNTSB FTW76FRG93Accident · No injuriesClosedMooney M20C · San Antonio, TXNTSB NYC76DNC66Accident · Serious injuriesClosedTaylorcraft BC12-D · Norridgewock, MENTSB CHI76DEP51Accident · Minor injuriesClosedCessna 150 · Boscobel, WINTSB SEA76FYE63Accident · Serious injuriesClosedBellanca 17-31 · Bremerton, WANTSB LAX76AL096Accident · 1 fatalClosedPiper PA-28 · Grand Canyon, AZNTSB MIA77DKT96Accident · No injuriesClosedPiper PA-30 · Miami, FLNTSB NYC76DFJ34Accident · Serious injuriesClosedPiper PA-25 · Avoca, NYNTSB MIA77DLD88Accident · No injuriesClosedLet-Np-K L-13 · Land O Lakes, FLNTSB CHI76FEM61Accident · No injuriesClosedCessna 172M · Gobles, MINTSB CHI76FEC65Accident · Minor injuriesClosedCessna 150H · Willis, MINTSB CHI76AC092Accident · 1 fatalClosedCessna 210B · Hamilton, OHNTSB FTW76DPA37Accident · Minor injuriesClosedBeech 35 · Waco, TXNTSB FTW76AF123Accident · 4 fatalClosedPiper PA-32 · Oak Ridge, LANTSB DEN76FTE99Accident · Serious injuriesClosedLuscombe 8E · Loma, CONTSB ANC76DAH81Accident · No injuriesClosedPiper PA-18 · Eagle River, AKNTSB CHI76FEA51Accident · No injuriesClosedPiper PA-28R · Lafayette, INNTSB CHI76AC091Accident · 6 fatalClosedBeech D55 · Coldwater, MINTSB SEA76FYE59Accident · Minor injuriesClosedBeech A35 · Port Townsend, WA