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 MIA72FLA46Accident · No injuriesClosedCessna 310P · Gainesville, FLNTSB ANC72DAG12Accident · No injuriesClosedCessna 150L · Goose Bay, AKNTSB OAK72AP043Accident · 1 fatalClosedCessna 150J · Modesto, CANTSB DEN72DTE69Accident · Minor injuriesClosedCessna 182 · Frisco, CONTSB NYC72FFA44Accident · Minor injuriesClosedAeronca 11AC · Broadalbin, NYNTSB NYC72FFA43Accident · No injuriesClosedCessna 182 · Glens Falls, NYNTSB LAX72DUG75Accident · Minor injuriesClosedCessna 150 · Bg Bear Cty, CANTSB FTW72FRG88Accident · Minor injuriesClosedCessna 177 · Austin, TXNTSB OAK72FVD47Accident · Minor injuriesClosedLuscombe 8A · Ukiah, CANTSB NYC73FNE12Accident · No injuriesClosedPiper PA-18 · New Milford, CTNTSB MIA72FKW28Accident · No injuriesClosedPiper J3C-65 · Elizabethton, TNNTSB FTW72AF080Accident · 2 fatalClosedPiper PA-32 · Hammond, LANTSB CHI72FEA40Accident · Minor injuriesClosedPiper PA-28 · Lafayette, INNTSB MIA72FLD69Accident · Minor injuriesClosedCessna 150H · Titusville, FLNTSB LAX72FUA37Accident · No injuriesClosedCessna 150K · Hntngtn Bch, CANTSB FTW72FPM31Accident · Minor injuriesClosedCessna 172D · Grove, OKNTSB CHI72FEG37Accident · Minor injuriesClosedLuscombe 8E · Bidwell, OHNTSB SEA72FYC42Accident · No injuriesClosedTaylorcraft BC12-D · Vancouver, WANTSB NYC72FLJ34Accident · Minor injuriesClosedCessna 150 · Rocky Mount, NCNTSB MIA72DKJ54Accident · No injuriesClosedSchweizer SGS233 · Estaboga, ALNTSB FTW72DPA23Accident · No injuriesClosedGlobe GC-1B · Dallas, TXNTSB NYC72FKM37Accident · Minor injuriesClosedAero Comdr 680 · Shelby, NCNTSB MKC72AK062Accident · Minor injuriesClosedPiper PA-28 · Anoka, MNNTSB FTW72AF078Accident · 1 fatalClosedCessna 177 · Many, LANTSB MIA72FLG40Accident · No injuriesClosedCessna A185E · Columbia, SCNTSB LAX72AL055Accident · 1 fatalClosedCessna 182J · Redlands, CANTSB CHI72FEP45Accident · 1 fatalClosedBensen B-8 · Wiscnsin Rpds, WINTSB MIA72AM124Accident · 1 fatalClosedCessna 414 · Merritt Islnd, FLNTSB MKC72DCG54Accident · No injuriesClosedMooney M18C · Lees Summit, MONTSB NYC72FFA41Accident · No injuriesClosedPiper PA-23 · Cobleskill, NYNTSB NYC72DFJ41Accident · No injuriesClosedPiper PA-28 · Manchester, NYNTSB SEA72DYE31Accident · No injuriesClosedErco 415-C · Bellevue, WANTSB NYC72DGM45Accident · No injuriesClosedStinson 108-2 · Scottsdale, PANTSB FTW72FPM29Accident · No injuriesClosedCessna 177 · Disney, OKNTSB FTW72DPD43Accident · Minor injuriesClosedCessna 150 · Keene, TXNTSB NYC72FFA38Accident · No injuriesClosedPiper PA-18 · Oneonta, NYNTSB NYC72DFA40Accident · Minor injuriesClosedSchweizer SGS222 · Ballston Spa, NYNTSB MKC72DER58Accident · No injuriesClosedCessna 170A · Anoka, MNNTSB SEA72AS049Accident · 1 fatalClosedPiper J5A · Spanaway, WANTSB MKC72FCG51Accident · Minor injuriesClosedCessna 172H · Gardner, KSNTSB NYC72AN139Accident · 1 fatalClosedBeech 95-E55 · Groton, CTNTSB FTW72DQG39Accident · No injuriesClosedBeech J35 · San Angelo, TXNTSB CHI73AC085Accident · 5 fatalClosedBeech 65-A90 · Racine, WINTSB OAK72DVG53Accident · Minor injuriesClosedCessna 206 · Woodland, CANTSB NYC72FHM46Accident · No injuriesClosedPiper PA-28 · White Lake, NYNTSB SEA72FYC38Accident · Serious injuriesClosedPiper PA-28 · Vancouver, WANTSB CHI72FEE77Accident · No injuriesClosedPiper PA-23 · Spring Grove, ILNTSB NYC72FGM42Accident · No injuriesClosedPiper PA-28 · New Cumbrlnd, WVNTSB LAX72DUJ93Accident · No injuriesClosedCessna 150 · Phoenix, AZNTSB SEA72DYI21Accident · Minor injuriesClosedCessna 172K · North Bend, OR