NTSB investigations
14,038 cases where the phase of flight was Takeoff.
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 = 300)
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 = 300)
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 IAD80FLT05Accident · Serious injuriesClosedCessna 152 · Memphis, TNNTSB LAX80FVG21Accident · Serious injuriesClosedPiper PA-32 · Angwin, CANTSB CHI80FEC13Accident · Minor injuriesClosedPiper PA-28 · Brighton, MINTSB LAX80DUJ44Accident · Serious injuriesClosedBLN Works FF-7 · Tucson, AZNTSB CHI80DEP20Accident · Minor injuriesClosedVertol 42A · Neosho, WINTSB MIA80FKT19Accident · No injuriesClosedBell 47G-2 · Miami, FLNTSB SEA80DYM22Accident · No injuriesClosedPiper PA-18 · Maupin, ORNTSB LAX80FVW14Accident · No injuriesClosedCessna 411A · Las Vegas, NVNTSB FTW80DPG16Accident · No injuriesClosedGrumman G-164B · Marked Tree, ARNTSB CHI80FEX05Accident · No injuriesClosedCessna 172 · Greencastle, INNTSB SEA80DYA10Accident · No injuriesClosedCessna 185D · Challis, IDNTSB MIA80DLG06Accident · No injuriesClosedPiper PA-32 · N Myrtle Beach, SCNTSB IAD80FLJ10Accident · No injuriesClosedPiper PA-32R · Redford, NCNTSB MKC80FTG06Accident · No injuriesClosedCessna 152 · New Rockford, NDNTSB CHI80FEE17Accident · No injuriesClosedSikorsky S-58 · Chicago, ILNTSB FTW80DPD14Accident · No injuriesClosedPazmany PL-4A · Fort Worth, TXNTSB NYC80DHA06Accident · No injuriesClosedPiper PA-28 · Mount Pocono, PANTSB SEA80DYE13Accident · Minor injuriesClosedS.N.I.A.S. 318C · Forks, WANTSB DEN80DTC06Accident · No injuriesClosedCessna 172N · Kemmerer, WYNTSB LAX80FVW10Accident · No injuriesClosedPiper PA-38 · Hendson, NVNTSB LAX80FUD04Accident · No injuriesClosedPiper PA-32 · Los Angeles, CANTSB DEN80DTE26Accident · No injuriesClosedBeech C23 · Colorado Spgs, CONTSB DEN80FTE24Accident · Minor injuriesClosedCessna 180 · Fort Collins, CONTSB MKC80FER25Accident · No injuriesClosedCessna 120 · Square Lake, MNNTSB MKC80DER28Accident · No injuriesClosedCessna 150L · Northome, MNNTSB MIA80FLD35Accident · No injuriesClosedCessna 180 · Sarasota, FLNTSB CHI80AA024Accident · 2 fatalClosedFalcon 10 · Chicago, ILNTSB LAX80FUQ10Accident · No injuriesClosedCessna 172N · Camarillo, CANTSB NYC80DHA04Accident · No injuriesClosedPiper PA-38 · Easton, PANTSB MIA80FLD32Accident · No injuriesClosedBell 206B · Sebastion, FLNTSB ANC80DAG24Accident · No injuriesClosedPiper PA-18 · Sparrevohn, AKNTSB SEA80DYP07Accident · No injuriesClosedCessna 340 · Yakima, WANTSB MKC80DCD10Accident · No injuriesClosedCessna U206 · West Union, IANTSB MIA80FKQ02Accident · 1 fatalClosedErco 415-C · Mooreville, MSNTSB LAX80DVW08Accident · No injuriesClosedCessna 310F · Boulder City, NVNTSB DEN80DTE17Accident · No injuriesClosedCessna 150M · Peyton, CONTSB ANC80DAG22Accident · No injuriesClosedHelio Acft H-250 · Anchorage, AKNTSB DEN80DTC04Accident · No injuriesClosedBell 206B · Thermopolis, WYNTSB MIA80IA103Incident · No injuriesClosedDouglas DC3C · St Thomas, VINTSB FTW80FRD12Accident · Serious injuriesClosedAerospatle AS-350 · Intracstl Cy, LANTSB CHI80DEM10Accident · Minor injuriesClosedPiper PA-20 · Ithaca, MINTSB LAX80DUG14Accident · Serious injuriesClosedCessna 182 · Needles, CANTSB SEA80FYE10Accident · Minor injuriesClosedHughes 369D · Mt.Vernon, WANTSB DEN80DQD04Accident · No injuriesClosedCessna 210 · Animas, NMNTSB DEN80DTM08Accident · No injuriesClosedHughes 269C · Cornich, UTNTSB LAX80FUG15Accident · Serious injuriesClosedBell 47G3B1 · Yucaipa, CANTSB LAX80DUG12Accident · No injuriesClosedBeech E18S · Laverne, CANTSB NYC80FFA07Accident · No injuriesClosedCessna 172 · Sharon Springs, NYNTSB MKC80FCQ07Accident · No injuriesClosedPiper PA-32 · Cedar Vale, KSNTSB MKC80DCA05Accident · Minor injuriesClosedCessna 185F · Chesterfield, MO