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 CHI66F0027Accident · No injuriesClosedCessna 140 · Ramsey, INNTSB SEA66F0011Accident · Minor injuriesClosedSchweizer 2-22E · Eugene, ORNTSB FTW66D0229Accident · No injuriesClosedPiper PA-22 · Oklahoma Cty, OKNTSB MKC65F0143Accident · Minor injuriesClosedPiper PA-20 · Emporia, KSNTSB MIA66F0011Accident · No injuriesClosedPiper PA-24 · St Petersburg, FLNTSB MIA65F0122Accident · Minor injuriesClosedCessna 172 · Tampa, FLNTSB NYC66D0018Accident · No injuriesClosedCessna 172 · Hillsboro, WVNTSB MKC66F0021Accident · Serious injuriesClosedCessna 182 · Kansas City, MONTSB MIA66F0003Accident · Serious injuriesClosedBeechcraft 35 · Northport, ALNTSB MIA65F0121Accident · Serious injuriesClosedSchweitzer SGS126 · Titusville, FLNTSB MKC66D0018Accident · Minor injuriesClosedLuscombe 8A · Mosby, MONTSB FTW66F0078Accident · Minor injuriesClosedCessna 180 · Sabinal, TXNTSB FTW66F0027Accident · No injuriesClosedPiper PA-23 · Little Rock, ARNTSB CAN65C0034Accident · Minor injuriesClosedAero Comdr 500 · Round Pond Nf, CanadaNTSB NYC65F0191Accident · No injuriesClosedAero Cmdr 680E · Warminster, PANTSB DCA65A0006Accident · No injuriesClosedDouglas DC-6A · Knob Noster, MONTSB OAK65F0068Accident · No injuriesClosedCessna 172A · Antioch, CANTSB MKC65F0154Accident · 1 fatalClosedSchweizer SGS126 · Papillion, NENTSB NYC65F0220Accident · No injuriesClosedMooney 20C · Monroeville, PANTSB MKC66F0072Accident · Minor injuriesClosedCessna 150 · Leawood, KSNTSB MKC65F0137Accident · No injuriesClosedPiper PA-22 · Ames, IANTSB CHI66F0058Accident · Minor injuriesClosedPiper PA-22 · Jeffersonville, INNTSB MKC66D0001Accident · Minor injuriesClosedPiper J3-C · Nebraska City, NENTSB NYC65F0196Accident · Minor injuriesClosedTaylorcraft DC-65 · Winchester, VANTSB MKC65F0136Accident · Minor injuriesClosedCessna 172 · Sioux Falls, SDNTSB DEN65D0084Accident · No injuriesClosedCessna 172D · Tucson, AZNTSB DEN65D0093Accident · Minor injuriesClosedCessna 170B · Wickenburg, AZNTSB NYC65F0203Accident · Serious injuriesClosedTaylorcraft BC12D · Parkville, MDNTSB MIA65F0094Accident · No injuriesClosedCessna 170A · Columbus, MSNTSB LAX65F0061Accident · No injuriesClosedErcoupe 415C · Carlsbad, CANTSB MIA66F0103Accident · No injuriesClosedCessna 175 · Guntersville, ALNTSB NYC65A0136Accident · 2 fatalClosedLuscombe 8A · Fire Isld Pine, NYNTSB NYC65F0198Accident · No injuriesClosedPiper PA-24 · Millbrook, NYNTSB CHI65A0094Accident · 1 fatalClosedLuscombe 8A · Hiram, OHNTSB NYC65F0179Accident · No injuriesClosedMaule M-4 · Mt Pleasant, PANTSB MIA65F0102Accident · Serious injuriesClosedBeech D18S · Opa-Locka, FLNTSB MIA65F0064Accident · Minor injuriesClosedPiper PA-12 · Chamblee, GANTSB FTW65A0108Accident · 1 fatalClosedMooney M20 · Jonesboro, ARNTSB MKC65D0139Accident · No injuriesClosedAeronca 0-58B · Carroll, IANTSB MIA65F0127Accident · No injuriesClosedAeronca 7AC · Rock Hill, SCNTSB CHI65F0191Accident · Serious injuriesClosedBeechcraft 95A · Bloomington, INNTSB CHI65A0093Accident · 2 fatalClosedAero Comm 500B · Rockford, ILNTSB SEA65D0054Accident · No injuriesClosedCessna 170B · Nyssa, ORNTSB NYC65F0115Accident · No injuriesClosedPiper PA-24 · Prospectville, PANTSB MKC65A0063Accident · No injuriesClosedBell B-47G3 · Dodge City, KSNTSB NYC65F0149Accident · Minor injuriesClosedCessna 182B · Reading, PANTSB MIA65A0105Accident · 2 fatalClosedCessna 172 · Evergreen, ALNTSB DEN65D0065Accident · Minor injuriesClosedChampion 7CCM · Alva, WYNTSB SEA65F0041Accident · No injuriesClosedNo American SNJ-5 · Caldwell, IDNTSB MIA65D0059Accident · No injuriesClosedCessna 150 · Miami, FL