NTSB investigations
20,559 cases where the phase of flight was Initial climb.
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 = 350)
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 = 350)
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 MIA75FKG39Accident · Serious injuriesClosedPiper PA-32 · Atlanta, GANTSB MKC75DTK05Accident · No injuriesClosedPiper PA-28 · Pierre, SDNTSB FTW75FPM10Accident · 1 fatalClosedCessna 310D · Tulsa, OKNTSB NYC75AN047Accident · No injuriesClosedBell 206 · Garden City, NYNTSB IAD75AI024Accident · 1 fatalClosedCessna 150 · Johnson City, TNNTSB OAK75FVD17Accident · Minor injuriesClosedAmer Avco AA1-B · Concord, CANTSB LAX75DUQ12Accident · Minor injuriesClosedCessna 170B · Santa Paula, CANTSB LAX75DUM07Accident · No injuriesClosedBoeing A75N1 · Calexico, CANTSB MIA75FKQ18Accident · Minor injuriesClosedCessna A188B · Glen Allen, MSNTSB LAX75DUQ11Accident · No injuriesClosedCessna 150 · Agua Dulce, CANTSB SEA75FTI13Accident · Minor injuriesClosedPiper PA-22 · Victor, MTNTSB SEA75FTA10Accident · Serious injuriesClosedCallair A-9 · Glendive, MTNTSB MKC75FCQ21Accident · Serious injuriesClosedBeech A24R · Caney, KSNTSB OAK75FVG26Accident · No injuriesClosedCessna A188 · Dixon, CANTSB CHI75AC030Accident · 2 fatalClosedCessna 150L · Morris, ILNTSB ANC75FAG47Accident · No injuriesClosedHiller Acft FH1100 · Iliamna, AKNTSB ANC75DAG48Accident · Minor injuriesClosedBellanca 7GCBC · Anchorage, AKNTSB FTW75DPD12Accident · No injuriesClosedCessna 150 · Goldthwaite, TXNTSB NYC75FNC13Accident · No injuriesClosedLake LA-4 · Lancaster, NHNTSB MIA75FLA17Accident · No injuriesClosedCessna 182P · Pensacola, FLNTSB DEN75FTE31Accident · 1 fatalClosedN.American T-28A · Aurora, CONTSB SEA75AS014Accident · 1 fatalClosedCessna 310B · Kent, WANTSB OAK74AP014Accident · No injuriesClosedBeech 3N · S.Francisco, CANTSB NYC75FNE18Accident · No injuriesClosedCessna 177 · Bridgeport, CTNTSB NYC75FHJ16Accident · No injuriesClosedPiper PA-28R · N Amityville, NYNTSB NYC75AN041Accident · 1 fatalClosedBeech B23 · Collegeville, PANTSB IAD75DKM11Accident · No injuriesClosedCessna 177 · Waynesville, NCNTSB DEN75FTE30Accident · Minor injuriesClosedCessna 182P · Center, CONTSB FTW75DPJ07Accident · No injuriesClosedAmer Avco AA5 · Yukon, OKNTSB MIA75FLD22Accident · No injuriesClosedCessna 150L · Clearwater, FLNTSB FTW75FPD09Accident · Minor injuriesClosedCessna 150 · Aledo, TXNTSB MIA75DLG14Accident · No injuriesClosedPiper PA-28 · Edisto Beach, SCNTSB IAD75FID06Accident · Minor injuriesClosedChampion 7FC · Martinsville, VANTSB OAK75FVA24Accident · No injuriesClosedBoeing A75 · Dos Palos, CANTSB MKC75FCG15Accident · Serious injuriesClosedCessna 172G · Eldon, MONTSB NYC75DHM08Accident · No injuriesClosedCessna 172 · Ramapo Valley, NYNTSB FTW75DQD12Accident · Minor injuriesClosedCessna 182 · Presidio, TXNTSB LAX75DVA26Accident · No injuriesClosedPiper PA-28R · Monache Mdw, CANTSB MIA75FLD35Accident · No injuriesClosedCessna 414 · Silver Sprngs, FLNTSB LAX75DUG14Accident · Minor injuriesClosedPiper PA-18A · Hemet, CANTSB ANC75AA027Accident · 2 fatalClosedCessna 185 · Fairbanks, AKNTSB MIA75FKG32Accident · 1 fatalClosedFlag Scootr HEC-1 · Claxton, GANTSB FTW75FPM07Accident · No injuriesClosedLuscombe 8A · Muskogee, OKNTSB CHI75FEP29Accident · Serious injuriesClosedPiper PA-30 · Chippewa Fls, WINTSB MKC75OK002Accident · Serious injuriesClosedCessna 210 · Manitoba, CanadaNTSB CHI75FEV05Accident · No injuriesClosedPiper PA-34 · Olney, ILNTSB CHI75FEM11Accident · Serious injuriesClosedCessna 172 · Harrison, MINTSB SEA75AYA21Accident · No injuriesClosedBoeing A75N · Hailey, IDNTSB MIA75FLA13Accident · No injuriesClosedPiper PA-28 · Jacksonville, FLNTSB LAX75DUJ29Accident · Minor injuriesClosedBeech S35 · Rimrock, AZ