NTSB investigations
14,041 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 NYC74FFJ10Accident · No injuriesClosedPiper PA-28R · Hornell, NYNTSB FTW74FRD09Accident · No injuriesClosedAmer Avco AA1-B · Slidell, LANTSB MIA74DKQ09Accident · No injuriesClosedPiper PA-25 · Rosedale, MSNTSB ANC74AA031Accident · No injuriesClosedGrumman G-44S · Farewell, AKNTSB ANC74DAG40Accident · No injuriesClosedBellanca 7ECA · Ptarmigan Ps, AKNTSB ANC74DAG42Accident · No injuriesClosedPiper PA-28 · Farewell, AKNTSB FTW74AF012Accident · 3 fatalClosedLockheed L-18 · Pecos, TXNTSB CHI74AC020Accident · 2 fatalClosedCessna 337A · Gary, INNTSB ANC74DAG48Accident · No injuriesClosedCessna 185 · Yakutat, AKNTSB ANC74DAG34Accident · No injuriesClosedPiper PA-18 · S.Susitna, AKNTSB NYC74DNA13Accident · No injuriesClosedPiper J-3 · Greene, RINTSB MIA74FKG21Accident · No injuriesClosedCessna 172F · Jasper, GANTSB ANC74FAG30Accident · Serious injuriesClosedCessna 180 · Port Heiden, AKNTSB MIA74D1011Accident · Minor injuriesClosedBell 47G-2 · Dalzell, SCNTSB ANC74FAA06Accident · Serious injuriesClosedCessna 170A · Fairbanks, AKNTSB SEA74DYA10Accident · No injuriesClosedCessna 140 · Preston, IDNTSB MIA74DKJ21Accident · No injuriesClosedWaco UPF-7 · Huntsville, ALNTSB LAX74DUJ17Accident · No injuriesClosedAeronca 11AC · Scottsdale, AZNTSB MKC74FCJ08Accident · No injuriesClosedBeech C35 · Papillion, NENTSB MKC74AK008Accident · 1 fatalClosedCessna 150J · Emporia, KSNTSB MKC74DCQ09Accident · No injuriesClosedCessna 140 · Goodland, KSNTSB CHI74DEA12Accident · No injuriesClosedPiper PA-28 · Radnor, INNTSB MIA74DKJ19Accident · No injuriesClosedAeronca 7AC · Vallermosa Sp, ALNTSB MIA74DKT15Accident · No injuriesClosedBoeing PT-17 · Palm Bch Gdns, FLNTSB IAD74DLT06Accident · No injuriesClosedPiper PA-28 · Somerville, TNNTSB ANC74AA028Accident · No injuriesClosedHelio Acft H-250 · Grubstake, AKNTSB MIA74DKJ15Accident · No injuriesClosedCessna 170A · Gadsden, ALNTSB ANC74DAG23Accident · No injuriesClosedTaylorcraft BCS12 · Palmer, AKNTSB OAK74FVG07Accident · Serious injuriesClosedGrumman TBM · Placerville, CANTSB FTW74DPD08Accident · No injuriesClosedBeech A23A · Throckmorton, TXNTSB NYC74FNE03Accident · No injuriesClosedCessna 150 · Westfield, MANTSB ANC74AA022Accident · No injuriesClosedAlouette SA318B · Bettles, AKNTSB SEA74FTA06Accident · Serious injuriesClosedCessna 140 · Ekalaka, MTNTSB IAD74DID08Accident · Minor injuriesClosedPiper PA-28 · Lexington, VANTSB ANC74AA024Accident · No injuriesClosedCessna 185 · Pilot Point, AKNTSB FTW74FQD04Accident · Minor injuriesClosedCessna 182 · Ft Davis, TXNTSB ANC74DAG18Accident · No injuriesClosedPiper J-3 · Grizzly Lake, AKNTSB CHI74FEM16Accident · Minor injuriesClosedBeech E17L · Charlevoix, MINTSB MKC74IK005Incident · No injuriesClosedBeech D18S · Mitchell, SDNTSB OAK74DXQ05Accident · No injuriesClosedEntwicklung Phoebs · Tahoe, CANTSB ANC74DAG14Accident · No injuriesClosedBell 206A · Cold Bay, AKNTSB FTW74FPA02Accident · No injuriesClosedChampion 7ECA · Plano, TXNTSB SEA74DYG10Accident · No injuriesClosedBell 47G3B2 · Tonasket, WANTSB NYC74AN011Accident · No injuriesClosedCessna 402 · Bar Harbor, MENTSB SEA74DYG07Accident · No injuriesClosedBell 47G3B · Orofino, IDNTSB MKC74DCQ02Accident · No injuriesClosedCessna 150 · Ashland, KSNTSB FTW74DPJ03Accident · No injuriesClosedPiper PA-25 · Blanchard, OKNTSB CHI74DEV07Accident · No injuriesClosedCessna 150 · Peoria, ILNTSB NYC74DGM02Accident · No injuriesClosedPiper PA-16 · Beaver Falls, PANTSB MIA74FLA04Accident · No injuriesClosedChampion 7ECA · Jacksonville, FL