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 CHI70FGD26Accident · No injuriesClosedPiper PA-28 · N.Kingsville, OHNTSB CHI70DDJ18Accident · No injuriesClosedCessna 150H · Dodgeville, WINTSB MKC70FCA12Accident · No injuriesClosedCessna 150J · Ft Leonrd Wood, MONTSB MKC70AK063Accident · No injuriesClosedCessna 310H · Omaha, NENTSB CHI70FBM19Accident · No injuriesClosedBeech C-35 · Marcellus, MINTSB ANC70FAA10Accident · Minor injuriesClosedCessna 170B · College, AKNTSB OAK70AP058Accident · No injuriesClosedLockheed Ga 382E · San Francisco, CANTSB FTW70DRG44Accident · No injuriesClosedSnow S2C · Encinal, TXNTSB DEN70FXA11Accident · No injuriesClosedStinson 108-2 · Casper, WYNTSB DEN70FQG16Accident · No injuriesClosedPiper PA-24 · Clovis, NMNTSB OAK70FVW18Accident · No injuriesClosedCessna 172F · Boulder City, NVNTSB OAK70DJA06Accident · No injuriesClosedStearman E75 · Honokaa, HINTSB LAX70AL071Accident · 4 fatalClosedBoeing 377MGT · Edwards Afb, CANTSB SEA70DWG14Accident · No injuriesClosedHelio Acft H-295 · Winthrop, WANTSB OAK70AP054Accident · Minor injuriesClosedBeech TC-45J · San Franciso, CANTSB FTW70DRD13Accident · No injuriesClosedBoeing B75N1 · Lake Charles, LANTSB DEN70DXT09Accident · No injuriesClosedPiper PA-12 · Salt Lake City, UTNTSB LAX70DVA16Accident · No injuriesClosedBoeing A75 · Arvin, CANTSB NYC70FFJ16Accident · No injuriesClosedPiper PA-20 · Moravia, NYNTSB MKC71DCD22Accident · No injuriesClosedCessna 120 · Gravity, IANTSB MKC70FCQ20Accident · No injuriesClosedCessna 180B · Syracuse, KSNTSB MKC70DCG25Accident · Minor injuriesClosedPiper PA-22 · Kirksville, MONTSB MIA70FRG28Accident · No injuriesClosedPiper PA-12 · Sylvania, GANTSB FTW70FPJ15Accident · No injuriesClosedAmer Avco AA-1 · Oklahoma Cty, OKNTSB FTW70DPD10Accident · Minor injuriesClosedBeech D18S · Los Moachis, MexicoNTSB SEA70FDA07Accident · No injuriesClosedChampion 7EC · Scobey, MTNTSB SEA70DWD11Accident · No injuriesClosedCessna 185D · Orcas, WANTSB ANC70FAG15Accident · No injuriesClosedCessna 180 · Seward, AKNTSB LAX70DUJ26Accident · No injuriesClosedPiper PA-22 · Chino Vally, AZNTSB MKC70DCJ18Accident · No injuriesClosedPiper J3L-65 · Ashland, NENTSB OAK70DJA05Accident · No injuriesClosedSchweitzer 2-32 · Waialua, HINTSB LAX70DUJ24Accident · No injuriesClosedLuscombe 8E · Chandler, AZNTSB DEN70DQA18Accident · No injuriesClosedCessna 182D · Counselor, NMNTSB OAK70DVG17Accident · No injuriesClosedErco 415-C · Pope Valley, CANTSB FTW70DRA13Accident · No injuriesClosedCessna 172 · Wheelock, TXNTSB NYC70DGM13Accident · No injuriesClosedChampion 7ECA · Ridgeway, PANTSB MIA70DLD20Accident · Minor injuriesClosedCessna 210 · Ocala, FLNTSB DEN70DQA15Accident · No injuriesClosedPiper PA-28 · Roswell, NMNTSB MIA70FLA17Accident · Minor injuriesClosedBoeing A75N1 · Pensacola, FLNTSB NYC70FFA15Accident · No injuriesClosedCessna 170B · Saranac Lake, NYNTSB CHI70DBM15Accident · No injuriesClosedPiper PA-28 · Francesville, INNTSB MKC70DCJ16Accident · No injuriesClosedPiper PA-22 · Chadron, NENTSB SEA70DWG09Accident · No injuriesClosedBoeing E75 · Southwick, IDNTSB CHI70FBM13Accident · No injuriesClosedCessna 150J · Gary, INNTSB CHI70DBM11Accident · No injuriesClosedTaylorcraft BC12D · Fort Wayne, INNTSB MKC70DDM18Accident · No injuriesClosedCessna 150J · Willmar, MNNTSB MKC70DCQ15Accident · No injuriesClosedBeech S35 · Russell, KSNTSB LAX70DUA17Accident · No injuriesClosedBell 47J-2 · Long Beach, CANTSB FTW70DRA07Accident · No injuriesClosedSnow S2B · East Benard, TXNTSB SEA70DXM10Accident · No injuriesClosedCessna 170 · Hailey, ID