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 NYC73AN086Accident · 2 fatalClosedPiper PA-23 · New Boston, MINTSB MKC73AK041Accident · 1 fatalClosedCessna 172K · Dickinson, NDNTSB FTW73AF030Accident · 1 fatalClosedCessna 210J · Bedford, TXNTSB LAX73AL027Accident · 1 fatalClosedAmer Avco AA-1A · Pacoima, CANTSB OAK73FJY10Accident · Serious injuriesClosedCessna 150H · Agana, GUNTSB NYC73AN083Accident · 4 fatalClosedCessna 411 · Winooski, VTNTSB MKC73DCA11Accident · No injuriesClosedPiper PA-28R · Festus, MONTSB CHI73FEP33Accident · No injuriesClosedCessna 172C · New Holstein, WINTSB NYC73FID14Accident · Serious injuriesClosedFairchild FH1100 · Roanoke, VANTSB NYC73AN080Accident · No injuriesClosedBoeing 707 · Jamaica, NYNTSB CHI73AC057Accident · Minor injuriesClosedHawker-Sdly DH125 · Findlay, OHNTSB LAX73FUD06Accident · No injuriesClosedPiper PA-28 · Compton, CANTSB OAK73FVG34Accident · No injuriesClosedAmer Avco AA-1A · Lincoln, CANTSB NYC73FLJ14Accident · 1 fatalClosedPiper PA-22 · Whitakers, NCNTSB MIA73AM059Accident · 1 fatalClosedAero Comdr 680V · Augusta, GANTSB FTW73FRG31Accident · Minor injuriesClosedBell 206A · Stonewall, TXNTSB FTW73AF024Accident · 2 fatalClosedPiper PA-32 · Laredo, TXNTSB DCA73A0003Accident · 43 fatalClosedBoeing 737 · Chicago, ILNTSB MIA73RKT36Accident · Serious injuriesClosedPiper PA-23 · Coakly Twn, Burkina FasoNTSB CHI73FET12Accident · No injuriesClosedBeech 35-B33 · South Bend, INNTSB NYC73FHJ10Accident · No injuriesClosedCessna 150L · N.Bayshore, NYNTSB MKC73FCQ22Accident · No injuriesClosedCessna 402B · Wichita, KSNTSB FTW73FPM05Accident · No injuriesClosedPiper PA-31 · Tulsa, OKNTSB FTW73AF023Accident · 3 fatalClosedPiper PA-32 · Baytown, TXNTSB DEN73AD026Accident · 5 fatalClosedLockheed PV-1 · Tucumcari, NMNTSB CHI73FEG12Accident · Serious injuriesClosedAmer Avco AA1A · Dayton, OHNTSB NYC73AN075Accident · 1 fatalClosedBeech D50 · Avoca, PANTSB MKC73AK040Accident · 2 fatalClosedBeech C-45H · St.Paul, MNNTSB OAK73AP014Accident · 3 fatalClosedBeech C18S · Searchlight, NVNTSB MIA73AM058Accident · 3 fatalClosedBeech G35 · Nashville, TNNTSB OAK73FVG32Accident · Serious injuriesClosedBellanca 17-30 · Auburn, CANTSB OAK73AP013Accident · 1 fatalClosedCessna 150D · Auburn, CANTSB NYC73FIJ11Accident · No injuriesClosedCessna 206D · Dublin, VANTSB MIA73AM057Accident · 4 fatalClosedPiper PA-23 · Jacksonville, FLNTSB LAX73DUJ38Accident · No injuriesClosedPiper PA-28 · Yuma, AZNTSB SEA73FYE20Accident · No injuriesClosedPiper PA-28 · Monroe, WANTSB MKC73DCD43Accident · No injuriesClosedCessna 150L · Ames, IANTSB LAX73FUM12Accident · Minor injuriesClosedMooney M20E · Calexico, CANTSB ANC73AAO35Accident · Serious injuriesClosedCessna 205 · Red Devil, AKNTSB CHI73AC049Accident · 2 fatalClosedCessna 182E · Willisville, ILNTSB NYC73FNA31Accident · Minor injuriesClosedCessna 150K · Middleboro, MANTSB MKC73FCJ23Accident · Minor injuriesClosedCessna 150F · Papillion, NENTSB MIA73FKG48Accident · Minor injuriesClosedCessna 310N · Macon, GANTSB DEN73AD023Accident · 1 fatalClosedPiper PA-24 · Cheyenne, WYNTSB LAX73FUJ41Accident · 1 fatalClosedBeech D18S · Wh.Mtn Lake, AZNTSB MIA73RM053Accident · 2 fatalClosedPiper PA-24 · Port Howe, Burkina FasoNTSB MKC73DCG20Accident · No injuriesClosedPiper PA-28 · Louisburg, KSNTSB LAX73FUG22Accident · Serious injuriesClosedCessna 182 · Rialto, CANTSB LAX73DUJ37Accident · Minor injuriesClosedCessna 177 · Carefree, AZNTSB MKC73AK037Accident · 2 fatalClosedCessna 182 · Duluth, MN