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 MKC76FCA03Accident · Minor injuriesClosedAero Comdr 560E · Piedmont, MONTSB MIA76DKJ05Accident · Minor injuriesClosedCessna 182 · Elberta, ALNTSB SEA76DYC07Accident · No injuriesClosedSchweizer SGS233 · North Plains, ORNTSB MKC76DER10Accident · No injuriesClosedBeech A23 · Pine City, MNNTSB OAK76AP003Accident · 2 fatalClosedErco 415-C · Redding, CANTSB LAX76DUM06Accident · No injuriesClosedBeech 35 · Santee, CANTSB LAX76AL003Accident · 1 fatalClosedPiper PA-32 · Anaheim, CANTSB DEN76DQD03Accident · Serious injuriesClosedFlug-Undfah HBV · Artesia, NMNTSB MKC76FCD02Accident · No injuriesClosedPiper PA-28R · Council Bluffs, IANTSB SEA7LAS002Accident · 1 fatalClosedPiper PA-28 · Spokane, WANTSB NYC76FFA02Accident · Serious injuriesClosedCessna 175 · Bethel, NYNTSB LAX76DUG07Accident · No injuriesClosedLockheed 12A · Rubidoux, CANTSB ANC76AA006Accident · Serious injuriesClosedMaule M-5 · Lime Village, AKNTSB IAD76II002Incident · No injuriesClosedCessna 150 · Nashville, TNNTSB IAD76FLQ03Accident · Serious injuriesClosedBellanca 17-31 · Louisville, KYNTSB DEN76FTE04Accident · Minor injuriesClosedCessna 172M · Englewood, CONTSB CHI76FEM02Accident · Serious injuriesClosedPiper J3-85C · Acme, MINTSB SEA76FTA01Accident · No injuriesClosedErco 415-D · Sidney, MTNTSB FTW76AF003Accident · No injuriesClosedGrumman G-159 · Addison, TXNTSB NYC76FHD01Accident · Serious injuriesClosedSchweizer SGS · Avondale, PANTSB MKC76DCG03Accident · Minor injuriesClosedPiper PA-22 · Camdenton, MONTSB ANC76FAA02Accident · No injuriesClosedBellanca 7GCBC · Beaver Creek, AKNTSB FTW76DQG06Accident · No injuriesClosedCessna 172A · Rotan, TXNTSB ANC76DAA04Accident · No injuriesClosedPiper PA-12 · Serpentine, AKNTSB MIA76FLG01Accident · Minor injuriesClosedCessna P206 · Winnsboro, SCNTSB SEA76DYC01Accident · No injuriesClosedPiper PA-25 · Baker, ORNTSB IAD76DKW01Accident · No injuriesClosedAmer Avco AA1-A · Collegedale, TNNTSB CHI76FEA01Accident · 1 fatalClosedSidewinder Burrow · Noblesville, INNTSB NYC76FHA03Accident · Minor injuriesClosedTed Smith 601P · Collegeville, PANTSB MKC76DER01Accident · No injuriesClosedCessna 150 · Anoka, MNNTSB FTW76FPD01Accident · Serious injuriesClosedBeech V35 · Bowie, TXNTSB MKC75FCA34Accident · Serious injuriesClosedCessna 150 · Poplar Bluff, MONTSB NYC75FGT21Accident · Serious injuriesClosedPiper PA-28 · New Cumberland, PANTSB MIA75FKJ65Accident · Serious injuriesClosedCessna 150 · Meridianville, ALNTSB IAD75FKW20Accident · Minor injuriesClosedCessna 182J · Crossville, TNNTSB IAD75AI066Accident · Serious injuriesClosedCessna 150L · Manassas, VANTSB FTW75FPJ27Accident · 1 fatalClosedCessna 172A · Enid, OKNTSB FTW75FPD50Accident · Minor injuriesClosedCessna 310 · Possum Kingdom, TXNTSB MIA75AM092Accident · 2 fatalClosedAeronca 7DC · Cedartown, GANTSB FTW75OQD31Accident · Minor injuriesClosedCessna 172 · Agua Caliente, MexicoNTSB CHI75FET23Accident · No injuriesClosedCessna 150 · Peru, INNTSB CHI75AC098Accident · 2 fatalClosedPiper PA-28R · Jeffersonville, INNTSB SEA75FYI30Accident · Minor injuriesClosedCessna 180A · Sunriver, ORNTSB DEN75FTE78Accident · Minor injuriesClosedCessna A185F · Burlington, CONTSB CHI75AC096Accident · 4 fatalClosedPiper PA-28 · Detroit, MINTSB MKC75DER78Accident · No injuriesClosedCessna 188 · Gully, MNNTSB IAD75FLJ34Accident · No injuriesClosedCessna P206 · Washington, NCNTSB DCA75AZ015Accident · 112 fatalClosedBoeing 727 · Jamaica, NYNTSB CHI75FEI59Accident · No injuriesClosedPiper PA-23 · Carrolton, OHNTSB LAX75FUQ30Accident · No injuriesClosedDehavilland Moth · Mojave, CA