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 IAD77FKW29Accident · Serious injuriesClosedAero Comdr 100 · Clifton, TNNTSB SEA77FYP43Accident · Serious injuriesClosedPiper PA-28R · Cle Elum, WANTSB NYC77FGM41Accident · No injuriesClosedBeech 23 · Finleyville, PANTSB ANC77DA087Accident · No injuriesClosedCessna 185F · Sheebo Lake, AKNTSB MKC77FCD43Accident · No injuriesClosedPiper PA-24 · Blakesburg, IANTSB FTW77FPM21Accident · Minor injuriesClosedCessna 150 · Tulsa, OKNTSB ANC77DAA54Accident · No injuriesClosedCessna 185F · Bettles, AKNTSB NYC77IA094Incident · No injuriesClosedBoeing 747 · Hampton, NYNTSB LAX77FUJ99Accident · Serious injuriesClosedGrumman G-164A · Casa Grande, AZNTSB ANC77DAH12Accident · No injuriesClosedCessna 172K · Glenallen, AKNTSB MIA77FKG73Accident · No injuriesClosedPiper PA-28 · Albany, GANTSB FTW77DQD27Accident · No injuriesClosedPiper PA-24 · Panther Junctn, TXNTSB CHI77DEE48Accident · No injuriesClosedGrumman G-164A · Sterling, ILNTSB NYC77FNC52Accident · No injuriesClosedPiper PA-20 · Thomaston, MENTSB MIA77FKJ88Accident · Serious injuriesClosedCessna 172 · Weaver, ALNTSB ANC77DA082Accident · No injuriesClosedCessna 170B · Golovin, AKNTSB NYC77FNC51Accident · Minor injuriesClosedCessna A185E · Patten, MENTSB MKC77OA003Accident · No injuriesClosedAeronca 15AC · Tommyhow, CanadaNTSB CHI77FEM38Accident · No injuriesClosedCessna 170A · Cedar Springs, MINTSB ANC77DAA46Accident · No injuriesClosedCessna 180F · Kaktovik, AKNTSB SEA77FYE34Accident · Serious injuriesClosedAnderson Kgfshr · Lakewood Ctr, WANTSB IAD77FIA23Accident · Serious injuriesClosedChampion 7ACA · Brandywine, MDNTSB ANC77DAH04Accident · No injuriesClosedPiper PA-18 · Talchlitna Rvr, AKNTSB MKC77FCQ57Accident · No injuriesClosedMooney M2OF · Holly, CONTSB NYC77FNC50Accident · No injuriesClosedCessna 177RG · Manchester, NHNTSB LAX77FUQ46Accident · No injuriesClosedCessna 150 · Santa Paula, CANTSB DEN77FTE69Accident · Serious injuriesClosedBeech A-36 · Breckenridge, CONTSB SEA77DTI18Accident · No injuriesClosedCessna 180 · Cut Bank, MTNTSB MIA77PKQ38Accident · No injuriesClosedCessna A188B · Rolling Fork, MSNTSB LAX77FA067Accident · 4 fatalClosedMooney M20E · Torrance, CANTSB MIA77FKQ37Accident · No injuriesClosedCessna A188B · Louisville, MSNTSB MIA77DKG70Accident · No injuriesClosedHughes 269A · Royston, GANTSB LAX77FUQ45Accident · No injuriesClosedPiper J3C-65 · Pacoima, CANTSB IAD77FLT06Accident · Serious injuriesClosedCessna 150H · Millington, TNNTSB CHI77FET33Accident · No injuriesClosedCessna 150M · Hobart, INNTSB IAD77DLT05Accident · No injuriesClosedPiper PA-25 · Trimble, TNNTSB FTW77FQG49Accident · No injuriesClosedPiper PA-25 · Edmonson, TXNTSB FTW77FPM19Accident · No injuriesClosedAeronca 11AC · Tulsa, OKNTSB LAX77FA065Accident · 2 fatalClosedBeech E18S · Catalina Is, CANTSB FTW77FPG78Accident · No injuriesClosedSnow S-2R · Wilmot, ARNTSB ANC77FAA45Accident · No injuriesClosedMaule M-4 · Eielson Afb, AKNTSB OAK77FVG60Accident · Serious injuriesClosedBeech 35 · Fair Oaks, CANTSB OAK77FXQ34Accident · 1 fatalClosedPiper PA-32 · Carson City, NVNTSB OAK77FVA51Accident · No injuriesClosedBeech E18S · Santa Nella, CANTSB NYC77FFA37Accident · No injuriesClosedPiper PA-28 · Mannsville, NYNTSB NYC77DFJ42Accident · No injuriesClosedCessna 150 · Hamburg, NYNTSB MKC77DCJ42Accident · No injuriesClosedCallair A-9B · St.Paul, NENTSB LAX77FUJ59Accident · No injuriesClosedPiper PA-20 · New River, AZNTSB LAX77FUD08Accident · Minor injuriesClosedPiper PA-28R · Los Angeles, CANTSB DEN77FTE76Accident · No injuriesClosedStinson 108-2 · Boulder, CO