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 MIA76FKJ56Accident · Minor injuriesClosedStinson 108 · Priceville, ALNTSB MKC76FCJ29Accident · Serious injuriesClosedPiper J3C-65 · Alliance, NENTSB FTW76FPD32Accident · Minor injuriesClosedGlobe GC-1B · Stamford, TXNTSB OAK76DVG55Accident · No injuriesClosedNaval Fcty N3N-3 · Winters, CANTSB NYC76AN089Accident · Serious injuriesClosedBeech 99 · Wappinger Fls, NYNTSB OAK76DXQ36Accident · No injuriesClosedErco 415-CD · Crescent Vly, NVNTSB OAK76DVG52Accident · Serious injuriesClosedCessna 150 · Fall Rvr Mills, CANTSB NYC76FHA22Accident · No injuriesClosedCessna 310 · Allentown, PANTSB FTW7600003Accident · No injuriesClosedCessna 206 · Tuxpan, MexicoNTSB MKC76AK051Accident · No injuriesClosedCessna U206F · Columbia, MONTSB NYC76FNE17Accident · Serious injuriesClosedPiper PA-28 · Waterford, CTNTSB CHI76FEC32Accident · Minor injuriesClosedCessna 177RG · Owosso, MINTSB CHI76FEV29Accident · Serious injuriesClosedMooney M20E · Colusa, ILNTSB MKC76FCQ39Accident · Serious injuriesClosedPiper PA-22 · Madison, KSNTSB CHI76FEE44Accident · No injuriesClosedCessna 182 · Belvidere, ILNTSB OAK76FVM26Accident · No injuriesClosedBoeing B75 · Watsonville, CANTSB OAK76FJA14Accident · No injuriesClosedPiper PA-32 · Lihue, HINTSB OAK76DXQ34Accident · Minor injuriesClosedPiper PA-28R · S.Lake Tahoe, CANTSB DEN76FTE57Accident · Serious injuriesClosedCessna 150J · Broomfield, CONTSB FTW76FPG43Accident · No injuriesClosedLuscombe 8A · Conway, ARNTSB ANC76DAG95Accident · No injuriesClosedBellanca 7ECA · Whitefish Lake, AKNTSB MKC76DCQ36Accident · Minor injuriesClosedInterstate S-1A · Spivey, KSNTSB MKC76DCQ35Accident · No injuriesClosedPiper PA-22 · Beaumont, KSNTSB DEN76FQD14Accident · Serious injuriesClosedPiper PA-28 · Silver City, NMNTSB CHI76DET29Accident · No injuriesClosedGrumman G-164 · Ft Wayne, INNTSB NYC76FGM25Accident · No injuriesClosedCessna T310Q · Erie, PANTSB FTW76DRA24Accident · No injuriesClosedCessna 150 · Addicks, TXNTSB SEA76FYE26Accident · No injuriesClosedPiper PA-28 · Auburn, WANTSB LAX76FUG34Accident · 1 fatalClosedGlobe GC-1B · Hesperia, CANTSB CHI76FEC28Accident · No injuriesClosedCessna 150G · Petersburg, MINTSB CHI76AC050Accident · 1 fatalClosedPiper PA-32 · Cable, WINTSB MKC76FCD29Accident · No injuriesClosedPiper PA-28 · Adel, IANTSB MIA76FKQ25Accident · 1 fatalClosedCessna 150 · Madison, MSNTSB FTW76AF066Accident · 1 fatalClosedPiper PA-32 · Waco, TXNTSB LAX76DUJ59Accident · No injuriesClosedGrumman G-164A · Yuma, AZNTSB NYC76AN079Accident · 1 fatalClosedTaylorcraft BC12-D · Minorsville, PANTSB OAK76FVM23Accident · No injuriesClosedStearman A75N1 · Castroville, CANTSB MKC76FCQ30Accident · 1 fatalClosedBede BD-5JX · Newton, KSNTSB MKC76DCG50Accident · No injuriesClosedCessna 172 · Topeka, KSNTSB FTW76DQD12Accident · Minor injuriesClosedCessna 150 · Coyanosa, TXNTSB CHI76DEM28Accident · No injuriesClosedCessna 182J · Newberry, MINTSB MKC76DER51Accident · No injuriesClosedPiper J3C-65 · Lino Lakes, MNNTSB MIA76AM060Accident · Minor injuriesClosedCessna 150L · Walls, MSNTSB DCA76AZ020Accident · 3 fatalClosedDouglas DC-6 · Van Nuys, CANTSB CHI76FEA25Accident · 1 fatalClosedSaltzman BD-5B · Evansville, INNTSB NYC76FNC41Accident · Minor injuriesClosedCessna 180 · Gray, MENTSB MIA76DKT54Accident · Minor injuriesClosedSikorsky S-52 · Miami, FLNTSB SEA76FYC28Accident · No injuriesClosedAmer Avco AA1-A · Goldendale, WANTSB FTW76AF062Accident · 2 fatalClosedBeech C-45H · Lafayette, LANTSB OAK76FVG45Accident · No injuriesClosedCessna 170 · Cordelia, CA