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 DEN80FTM21Accident · No injuriesClosedPiper PA-28 · Nephi, UTNTSB CHI80DEC19Accident · No injuriesClosedPiper PA-28R · Pigeon, MINTSB ATL80FIG11Accident · No injuriesClosedCessna U206G · Woodbine, MDNTSB ATL80DKM19Accident · No injuriesClosedPiper PA-28 · Gastonia, NCNTSB MIA80FA065Accident · 3 fatalClosedConvair 240 · Daytona Beach, FLNTSB CHI80DEP32Accident · No injuriesClosedStearman A75-N1 · City Point, WINTSB ATL80IA048Incident · No injuriesClosedDouglas DC-8 · Atlanta, GANTSB ANC80DAG60Accident · No injuriesClosedCessna R172E · Kahiltna Strip, AKNTSB MIA80FLD68Accident · No injuriesClosedGrum-Amer AA-5 · Clearwater, FLNTSB NYC80FFJ07Accident · No injuriesClosedPiper PA-38 · Weedsport, NYNTSB FTW80FA077Accident · Minor injuriesClosedHughes 269B · Arlington, TXNTSB SEA80DYM35Accident · No injuriesClosedStinson 108-3 · Dayton, ORNTSB LAX80DUJ59Accident · No injuriesClosedCessna 177RG · Congress, AZNTSB ANC80DAG57Accident · Minor injuriesClosedBell 206B · Anchorage, AKNTSB ANC80DAG70Accident · No injuriesClosedCessna 120 · Egegik, AKNTSB FTW80DPJ20Accident · No injuriesClosedHiller Acft HU-12D · Norman, OKNTSB ANC80DAG53Accident · Minor injuriesClosedPiper PA-18 · Dillingham, AKNTSB ANC80DAG51Accident · No injuriesClosedMaule M-5 · Polly Creek, AKNTSB FTW80DA072Accident · 1 fatalClosedBell 206B · Intracstl Cy, LANTSB CHI80FER42Accident · No injuriesClosedAeronca 7AC · Mora, MNNTSB FTW80FPD27Accident · No injuriesClosedCessna 172 · Stephenville, TXNTSB LAX80FJA14Accident · No injuriesClosedBellanca 7KCAB · Molokai, HINTSB CHI80FEI17Accident · No injuriesClosedCessna 172 · Alliance, OHNTSB CHI80FEC16Accident · Minor injuriesClosedPiper PA-22 · Hadley, MINTSB MKC80DA033Accident · Serious injuriesClosedRaven S55A · Council Bluffs, IANTSB CHI80FEI16Accident · No injuriesClosedCessna 172 · Ravenna, OHNTSB ANC80DAG50Accident · No injuriesClosedCessna 305A · Skwentna, AKNTSB MKC80FCQ15Accident · No injuriesClosedPiper PA-34 · Hays, KSNTSB FTW80DRD29Accident · No injuriesClosedGrumman G-164B · Church Point, LANTSB SEA80DYK08Accident · Minor injuriesClosedBell 214B-1 · Bend, ORNTSB DEN80FTM16Accident · No injuriesClosedBell 47G3B1 · Vernal, UTNTSB FTW80DRD26Accident · Minor injuriesClosedCessna 152 · Houma, LANTSB LAX80DVG30Accident · Minor injuriesClosedHiller UH-12J · Frks Of Salmn, CANTSB ANC80DA041Accident · No injuriesClosedCessna 207A · Stebbins, AKNTSB CHI80FEG11Accident · No injuriesClosedPiper PA-36 · Midland, OHNTSB CHI80FEK09Accident · No injuriesClosedCessna 150 · Carysville, OHNTSB NYC80FNC20Accident · Minor injuriesClosedGrum-Amer AA1-B · Moultonboro, NHNTSB CHI80FET15Accident · No injuriesClosedPiper PA32RT · New Haven, INNTSB LAX80DUJ46Accident · No injuriesClosedCessna 150H · Dolan Springs, AZNTSB FTW80FPA09Accident · No injuriesClosedPiper PA-28R · Mc Kinney, TXNTSB LAX80FVG26Accident · No injuriesClosedEnstrom F28C · Sacramento, CANTSB NYC80DNC19Accident · No injuriesClosedAero Comdr 100 · Cornwall, VTNTSB SEA80DYK06Accident · Minor injuriesClosedErco 415-C · Glide, ORNTSB ANC80DAG42Accident · No injuriesClosedCessna 185E · A.Larson Bay, AKNTSB FTW80FQG13Accident · No injuriesClosedCessna 150 · Childress, TXNTSB NYC80FHM13Accident · No injuriesClosedCessna 182F · Spring Valley, NYNTSB MIA80DLD51Accident · No injuriesClosedCessna 152 · Ft.Pierce, FLNTSB ANC80DAG40Accident · No injuriesClosedCessna 182 · Kwethluk, AKNTSB CHI80FEM21Accident · No injuriesClosedCessna 150M · Allegan, MINTSB DEN80FTE36Accident · No injuriesClosedBell 206B · Burlington, CO