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 MIA76DKT18Accident · No injuriesClosedHiller Acft FH1100 · Ft Lauderdale, FLNTSB SEA76DYG13Accident · No injuriesClosedPiper PA-25 · Odessa, WANTSB NYC76FFA13Accident · Minor injuriesClosedLuscombe 8A · Galway, NYNTSB FTW76FRG18Accident · No injuriesClosedErco 415-C · Pearsall, TXNTSB DEN76AD015Accident · 6 fatalClosedBeech A35 · Hurricane, UTNTSB MIA76DKT17Accident · No injuriesClosedCessna 150 · Terrytown, FLNTSB ANC76DAG39Accident · Serious injuriesClosedCessna 182 · Isabell Camp, AKNTSB ANC76DAG37Accident · Serious injuriesClosedCessna 172 · Eureka Lodge, AKNTSB SEA76FYI07Accident · No injuriesClosedAero Comdr A-9B · Roseburg, ORNTSB NYC76FFJ07Accident · Minor injuriesClosedBeech A23 · Allegany, NYNTSB CHI76AC021Accident · 2 fatalClosedPiper PA-24 · Wheeling, ILNTSB ANC76FAG30Accident · Serious injuriesClosedCessna 177 · Cantwell, AKNTSB IAD76FIA02Accident · Serious injuriesClosedAeronca SO-58B · Laplata, MDNTSB FTW76FPG18Accident · Serious injuriesClosedCessna 172M · Lakeview, ARNTSB FTW76DRG20Accident · Minor injuriesClosedAero Comdr S2R · Mission, TXNTSB MKC76DCD09Accident · No injuriesClosedPiper PA-28 · Riceville, IANTSB MIA76DKG22Accident · Minor injuriesClosedPiper PA-22 · Claxton, GANTSB FTW76DPJ11Accident · No injuriesClosedCessna A188B · Albert, OKNTSB CHI76AC019Accident · 1 fatalClosedCessna 170 · Bronson, MINTSB ANC76DAG32Accident · No injuriesClosedCessna 185B · Gulkana, AKNTSB SEA76FTI11Accident · 2 fatalClosedBede 4 · Seely Lake, MTNTSB ANC76DAA14Accident · No injuriesClosedChampion 7GCB · Northway, AKNTSB CHI76DEM09Accident · Minor injuriesClosedBeech C35 · Rockford, MINTSB DEN76FTE22Accident · Minor injuriesClosedAeronca 058B · Aurora, CONTSB CHI76DET12Accident · Minor injuriesClosedPiper PA-28 · Hanna, INNTSB CHI76DET11Accident · No injuriesClosedCallair A9 · Kewanna, INNTSB MIA76FKQ10Accident · No injuriesClosedAero Cmdr S2R · Belzoni, MSNTSB CHI76FET13Accident · No injuriesClosedPiper PA-25 · Wawaka, INNTSB SEA76FTI10Accident · Minor injuriesClosedCallair A-9 · Conrad, MTNTSB SEA76DYG09Accident · No injuriesClosedCessna 150 · Ellensburg, WANTSB OAK7LFXQ10Accident · Minor injuriesClosedNavion A · Truckee, CANTSB DEN76FTM06Accident · No injuriesClosedCessna 172 · Beaver, UTNTSB ANC76AA027Accident · 1 fatalClosedPiper PA-28 · Whittier, AKNTSB LAX76O0002Accident · 1 fatalClosedNavion B · Ensenada, MexicoNTSB NYC76FNA13Accident · No injuriesClosedPiper PA-34 · Newburyport, MANTSB MIA76AM016Accident · 1 fatalClosedCessna 182C · Hilliard, FLNTSB ANC76DAG24Accident · Minor injuriesClosedCessna 182J · Willow, AKNTSB ANC76DAA10Accident · No injuriesClosedAeronca 15AC · Fairbanks, AKNTSB MIA7LFKG13Accident · Minor injuriesClosedAero Comdr 600S2R · Albany, GANTSB MIA76FKG16Accident · No injuriesClosedCessna A188B · Hawkinsville, GANTSB MIA76DLG10Accident · Minor injuriesClosedCessna 172H · Nichols, SCNTSB FTW76FRG15Accident · 3 fatalClosedConvair PBY-6 · Harlingen, TXNTSB CHI76FEI11Accident · No injuriesClosedPiper PA-28 · West Salem, OHNTSB SEA76DTI08Accident · Minor injuriesClosedCessna 180H · Manchester, MTNTSB MKC76DCG16Accident · Minor injuriesClosedPiper J-3 · Sedalia, MONTSB DEN76DTE16Accident · Minor injuriesClosedChampion 7ECA · Calhan, CONTSB FTW75DPJ06Accident · Minor injuriesClosedGrumman G-164 · Pauls Valley, OKNTSB NYC76FNA11Accident · Serious injuriesClosedCessna 305A · Plymouth, MANTSB DEN7LAD009Accident · 2 fatalClosedCessna 170B · Spanish Fork, UTNTSB MKC76DCG15Accident · No injuriesClosedBeech E55 · Springfield, MO