NTSB investigations
6,400 cases where the phase of flight was Taxi.
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 = 250)
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 = 250)
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 NYC76FHJ33Accident · No injuriesClosedPiper PA-28 · Mattituck, NYNTSB CHI76FEK29Accident · No injuriesClosedPiper PA-34 · Columbus, OHNTSB NYC76AN127Accident · Serious injuriesClosedBoeing 747 · Jamaica, NYNTSB FTW76FPJ46Accident · Serious injuriesClosedBrantley 305 · Chattanooga, OKNTSB NYC76DFJ36Accident · No injuriesClosedCessna 172 · Leroy, NYNTSB NYC76FHJ31Accident · No injuriesClosedMooney M20F · White Plains, NYNTSB NYC76AN126Accident · 1 fatalClosedBeech S35 · Block Island, RINTSB IAD76FIG28Accident · Minor injuriesClosedLuscombe 8E · Mitchellville, MDNTSB SEA76DYE58Accident · No injuriesClosedCessna 175 · Oak Harbor, WANTSB MIA76OKT95Accident · No injuriesClosedCessna 182 · Eleuthera, Burkina FasoNTSB MIA76DLD82Accident · No injuriesClosedPiper PA-18S · Winter Haven, FLNTSB FTW76FRD61Accident · No injuriesClosedCessna 310F · Lafayette, LANTSB NYC76DFA51Accident · No injuriesClosedCessna 182 · Piseco, NYNTSB MKC76AK078Accident · No injuriesClosedCessna 402 · Hays, KSNTSB FTW76DPJ49Accident · Minor injuriesClosedBell 47G-2 · Elgin, OKNTSB DEN76FTM42Accident · No injuriesClosedCessna 182 · Salt Lake City, UTNTSB CHI76FEG19Accident · No injuriesClosedBeech C23 · Cincinnati, OHNTSB MKC76DER82Accident · No injuriesClosedCessna 150J · Anoka, MNNTSB FTW76DRD55Accident · No injuriesClosedGrumman G-164A · Thibodaux, LANTSB ANC76DAD08Accident · No injuriesClosedCessna 185 · Ketchikan, AKNTSB MIA76FLG43Accident · No injuriesClosedPiper J-3 · Aiken, SCNTSB SEA76DYE57Accident · No injuriesClosedCessna 182E · Renton, WANTSB NYC76FHA46Accident · Serious injuriesClosedEnstrom F-28A · Collegeville, PANTSB DEN76FTC41Accident · No injuriesClosedCessna 182A · Casper, WYNTSB MKC76DER75Accident · No injuriesClosedPiper PA-28R · Sauk Centre, MNNTSB IAD76FIG20Accident · No injuriesClosedPiper PA-28 · Baltimore, MDNTSB ANC76DAH41Accident · No injuriesClosedCessna 185E · Gibralter Lake, AKNTSB MKC76DTG19Accident · Minor injuriesClosedCessna 150M · Rolette, NDNTSB MKC76DCG81Accident · No injuriesClosedCessna 150 · Springfield, MONTSB ANC76DAH35Accident · No injuriesClosedNelson NJ4 · Big Lake, AKNTSB NYC76FHJ23Accident · No injuriesClosedShort Bros SC7 · Jamaica, NYNTSB SEA76FYA28Accident · Serious injuriesClosedTaylorcraft BC12-D · Mountain Home, IDNTSB CHI76AC072Accident · No injuriesClosedPiper PA-34 · Michigan City, INNTSB OAK76DVA71Accident · No injuriesClosedWaco AQC-6 · Reedley, CANTSB ANC76DAH26Accident · No injuriesClosedCessna 185 · Merrill Pass, AKNTSB MIA76DKJ72Accident · No injuriesClosedRyan ST-3KR · Fairhope, ALNTSB LAX76DUG57Accident · No injuriesClosedCessna 172 · Palo Verde, CANTSB OAK76DVD41Accident · No injuriesClosedPiper PA-28 · Petaluma, CANTSB FTW76DQH11Accident · No injuriesClosedPiper PA-24 · Muleshoe, TXNTSB MIA76FLA56Accident · No injuriesClosedPiper PA-28 · Jacksonville, FLNTSB OAK76DVM44Accident · No injuriesClosedCessna 150 · Palo Alto, CANTSB MIA76AM092Accident · No injuriesClosedDouglas DC-3 · Naples, FLNTSB MIA76DKJ67Accident · No injuriesClosedCessna 172A · Bessemer, ALNTSB NYC76FFA34Accident · No injuriesClosedCessna 172 · Albany, NYNTSB NYC76DFJ23Accident · No injuriesClosedCessna 150 · Elmira, NYNTSB FTW76AF097Accident · Minor injuriesClosedBell 47J-2 · Baton Rouge, LANTSB OAK76FJA17Accident · No injuriesClosedDouglas DC-10 · Honolulu, HINTSB NYC76DNA39Accident · No injuriesClosedStinson 108-3 · Oak Bluffs, MANTSB LAX76DUQ39Accident · No injuriesClosedTaylorcraft BC12-D · Pacoima, CANTSB DEN76FTE73Accident · No injuriesClosedCessna 172 · Broomfield, CO