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 DEN77FQD09Accident · No injuriesClosedCessna 402A · Silver City, NMNTSB FTW77DA032Accident · No injuriesClosedCessna 172 · Dallas, TXNTSB MIA77DKJ13Accident · No injuriesClosedPiper PA-23C · Enterprise, ALNTSB NYC77FA029Accident · No injuriesClosedBoeing 727 · Jamaica, NYNTSB SEA77FA013Incident · No injuriesClosedDouglas DC-8 · Moses Lake, WANTSB DEN77DQD07Accident · No injuriesClosedCessna 411 · Artesia, NMNTSB OAK77FJA06Accident · Minor injuriesClosedGrumman AA-1B · Honolulu, HINTSB FTW77FPG17Accident · No injuriesClosedBell 204A · Vanndale, ARNTSB FTW77FRD06Accident · No injuriesClosedCessna 150 · Oakdale, LANTSB FTW77DRG24Accident · Minor injuriesClosedBellanca 1731TC · Eagle Pass, TXNTSB IAD77DKW11Accident · No injuriesClosedBrantly B2B · Fayetteville, TNNTSB MIA77FLG05Accident · No injuriesClosedCessna 172 · Columbia, SCNTSB CHI77FEC07Accident · No injuriesClosedCessna 172 · Detroit, MINTSB MIA77DLA22Accident · No injuriesClosedBeech 35 · Ft.Pierce, FLNTSB MKC77DER10Accident · No injuriesClosedCessna 180 · White Bear Lk, MNNTSB IAD77DIA07Accident · No injuriesClosedCessna 172 · Chantilly, VANTSB LAX77DUG16Accident · No injuriesClosedPiper PA-28 · Palm Springs, CANTSB MIA77FKJ10Accident · No injuriesClosedPiper PA-24 · Birmingham, ALNTSB MIA77FLD19Accident · No injuriesClosedPiper PA-32 · Lake Placid, FLNTSB NYC77FNA06Accident · No injuriesClosedCessna 172C · Warwick, RINTSB MKC77DCQ10Accident · No injuriesClosedCessna U206 · Wichita, KSNTSB DEN77DTC02Accident · No injuriesClosedCessna 182J · Cheyenne, WYNTSB NYC77DFA08Accident · No injuriesClosedCessna 150 · Kingston, NYNTSB LAX77DUG13Accident · No injuriesClosedGrumman F6F-5 · Elsinore, CANTSB ANC77DA013Accident · No injuriesClosedCessna 170B · Beaver, AKNTSB LAX77DUJ18|LAX77DUG18Accident · No injuriesClosedCessna 182 · Phoenix, AZNTSB NYC76DHJ04Accident · No injuriesClosedCessna 172 · Farmingdale, NYNTSB FTW77FPJ01Accident · No injuriesClosedCessna 172 · Oklahoma City, OKNTSB OAK77IA006Incident · No injuriesClosedBeech A36 · San Francisco, CANTSB ANC77FAA06Accident · No injuriesClosedCessna 185F · North Pole, AKNTSB IAD77DIA04Accident · No injuriesClosedCessna 182P · Chantilly, VANTSB NYC77FA011Accident · No injuriesClosedDouglas DC-9 · Buffalo, NYNTSB SEA77DYC09Accident · Minor injuriesClosedCessna 150 · Cornelius, ORNTSB NYC77FHA04Accident · Minor injuriesClosedAeronca 11AC · Hazleton, PANTSB CHI77DEA02Accident · No injuriesClosedBeech 35 · Indianapolis, INNTSB LAX77DUM08Accident · No injuriesClosedPiper PA-36 · Holtville, CANTSB MIA77FKJ04Accident · No injuriesClosedPiper PA-34 · Selma, ALNTSB MKC77FTK02Accident · No injuriesClosedPiper PA-32 · Dell Rapids, SDNTSB MKC77FER04Accident · Minor injuriesClosedChampion 7GCB · Chaska, MNNTSB NYC77FNE04Accident · No injuriesClosedLuscombe 8A · Burlington, CTNTSB CHI77FEM11Accident · No injuriesClosedSwearingen SA26T · Clare, MINTSB MKC77DCG04Accident · No injuriesClosedLuscombe 8A · Carthage, MONTSB ANC77DAG21Accident · No injuriesClosedCessna 150 · Kodiak, AKNTSB MIA77DLA04Accident · No injuriesClosedEnstrom F-28 · Destin, FLNTSB MIA77FLD04Accident · No injuriesClosedCessna 310 · Sarasota, FLNTSB MKC77FCQ02Accident · No injuriesClosedCessna 310G · Garden City, KSNTSB MIA76OM012Accident · No injuriesClosedPiper PA-32 · Point-Pitre, GuadeloupeNTSB ANC76FAH90Accident · No injuriesClosedCessna 185 · Iliamna, AKNTSB ANC76DAH83Accident · No injuriesClosedPiper PA-12 · Port Alsworth, AKNTSB NYC77FHJ02Accident · No injuriesClosedCessna 172K · Farmingdale, NY