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 LAX76DUM03Accident · No injuriesClosedCessna 150J · Ramona, CANTSB SEA76FTA02Accident · No injuriesClosedBellanca 7GCBC · Sand Springs, MTNTSB SEA76DYE04Accident · Minor injuriesClosedPiper PA-18 · North Bend, WANTSB MIA76AM007Accident · Minor injuriesClosedDehavilland DH114 · San Juan, PRNTSB FTW76DPG04Accident · No injuriesClosedGrumman G-164A · Cotton Plant, ARNTSB DEN76FTC02Accident · Minor injuriesClosedHiller Acft UH12L4 · Wapiti, WYNTSB DEN76DQA02Accident · Minor injuriesClosedAmer Avco AA1-B · Pie Town, NMNTSB FTW76DQG02Accident · No injuriesClosedPiper PA-24 · Bovina, TXNTSB ANC76DAA03Accident · No injuriesClosedCessna 180 · Fairbanks, AKNTSB OAK76DXQ05Accident · No injuriesClosedBell 47G3B1 · Mommoth Lakes, CANTSB MIA76FLD05Accident · No injuriesClosedBeech C55 · Titusville, FLNTSB CHI76FEE01Accident · No injuriesClosedBeech A23 · Wheeling, ILNTSB SEA76AYA01Accident · Minor injuriesClosedVolksplane VP-2 · Boise, IDNTSB FTW76DRA02Accident · No injuriesClosedCessna 188B · La Ward, TXNTSB ANC76DAD01Accident · No injuriesClosedBellanca 7GCBC · Kake, AKNTSB ANC76DAA01Accident · No injuriesClosedHelio Acft H-391B · Northway, AKNTSB CHI76FEM01Accident · Serious injuriesClosedPiper PA-24 · Gobles, MINTSB SEA7LFTI01Accident · No injuriesClosedCessna 150G · Wise River, MTNTSB MKC76DER07Accident · No injuriesClosedVolmer V-322 · White Bear Lke, MNNTSB LAX76DUJ02Accident · No injuriesClosedStinson 108-3 · Springerville, AZNTSB CHI76AC001Accident · Minor injuriesClosedGates Lear 25B · Oston, INNTSB SEA76DYA04Accident · No injuriesClosedGrumman G-164 · Rupert, IDNTSB OAK76FVG02Accident · 1 fatalClosedBell 47G-2 · Napa, CANTSB CHI75FEC61Accident · No injuriesClosedCessna 170 · Jackson, MINTSB MIA75FKJ66Accident · No injuriesClosedCessna 421B · Mobile, ALNTSB NYC76DFA44Accident · No injuriesClosedSchweizer 2-33 · Saratoga Spgs, NYNTSB ANC76AA002Accident · No injuriesClosedBell 47G-3 · Nondalton, AKNTSB MKC75FCQ59Accident · No injuriesClosedCessna 185 · Wichita, KSNTSB OAK75 VA75Accident · No injuriesClosedBoeing A75L3 · Hickman, CANTSB MKC75DCQ58Accident · No injuriesClosedHughes 269A · Atwood, KSNTSB MKC75DCJ61Accident · No injuriesClosedSmith Mini · Lincoln, NENTSB NYC7KFHD56Accident · Serious injuriesClosedStinson L-5 · Millville, NJNTSB LAX75DUJ94Accident · Minor injuriesClosedCessna 182 · St.Johns, AZNTSB MIA75DLA49Accident · No injuriesClosedGrum Amer AA-5 · Pensacola, FLNTSB DEN75DTC28Accident · No injuriesClosedPiper PA-18 · Jackson Hole, WYNTSB ANC76DAA18Accident · No injuriesClosedHelio Acft H-250 · Teller, AKNTSB MKC75FCG52Accident · No injuriesClosedBell 47D-1 · Lowry City, MONTSB MIA75FKG80Accident · Minor injuriesClosedHughes 269B · Atlanta, GANTSB DEN75FTE76Accident · No injuriesClosedPiper PA-20 · Longmont, CONTSB LAX7JDUJ92Accident · No injuriesClosedHughes 369HS · Winslow, AZNTSB OAK75FVM37Accident · No injuriesClosedCessna 185D · San Carlos, CANTSB CHI75FEC59Accident · No injuriesClosedLake LA-4 · E Lansing, MINTSB NYC75FFJ25Accident · No injuriesClosedCessna 140 · Corfu, NYNTSB IAD75FLJ31Accident · No injuriesClosedPiper PA-30 · Oxford, NCNTSB DEN75DTM19Accident · No injuriesClosedCessna 180B · Orangeville, UTNTSB LAX75DUJ97Accident · No injuriesClosedBeech A60 · Marble Canyon, AZNTSB LAX75DUM29Accident · No injuriesClosedErco 415-CD · Santee, CANTSB ANC75AA089Accident · No injuriesClosedPiper PA-32 · Nuiqsut, AKNTSB NYC75DCQ53Accident · No injuriesClosedAmer Avco AA1-B · Manhattan, KSNTSB MKC75FCQ52Accident · No injuriesClosedBell 47D1 · Holcomb, KS