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 CHI80FEM33Accident · Minor injuriesClosedLake 4-200 · Byron Center, MINTSB ATL80FKQ12Accident · Minor injuriesClosedCessna A188B · Hollandale, MSNTSB ATL80DKG09Accident · No injuriesClosedGrum Amer AA5-B · Americus, GANTSB ANC80DAG72Accident · Serious injuriesClosedPiper PA-18 · Iliamna, AKNTSB NYC80FNE20Accident · No injuriesClosedPiper J3C-65 · Windham, CTNTSB NYC80FFJ12Accident · No injuriesClosedTaylorcraft BC12-D · Liverpool, NYNTSB NYC80FA050Accident · 5 fatalClosedPiper PA-28 · Ocean City, NJNTSB NYC80DHD20Accident · No injuriesClosedMillercraft A · Laurel, DENTSB CHI80FA050Accident · 2 fatalClosedPiper PA-11S · Orleans, MINTSB LAX80DUG45Accident · No injuriesClosedRepublic P47D · Daggett, CANTSB FTW80DRA42Accident · No injuriesClosedGrumman G-164A · Winnie, TXNTSB FTW80FA089Accident · 1 fatalClosedFairchild M-62C · Plano, TXNTSB LAX80DUJ78Accident · No injuriesClosedPiper PA-25 · Maricopa, AZNTSB FTW80DRJ26Accident · No injuriesClosedGrumman G164A · Crowville, LANTSB MIA80DLD71Accident · No injuriesClosedBellanca 7GCAA · St.Petersburg, FLNTSB LAX80DXQ35Accident · No injuriesClosedCessna 172 · Mammoth Lakes, CANTSB ATL80FIG12Accident · No injuriesClosedPiper PA-12 · Edgewater, MDNTSB LAX80DVG50Accident · No injuriesClosedGrumman G-164 · Sacramento, CANTSB ANC80DAG63Accident · No injuriesClosedCessna 180 · Coghill Lake, AKNTSB NYC80FFJ09Accident · No injuriesClosedCessna 210D · Syracuse, NYNTSB LAX80DVG51Accident · No injuriesClosedAmateur T-TWO · Rio Vista, CANTSB MKC80FA042Accident · 1 fatalClosedCessna 172M · Cardwell, MONTSB MIA80DLA28Accident · Minor injuriesClosedBell 206B · Daytona Beach, FLNTSB FTW80FA088Accident · 2 fatalClosedRockwell 112TCA · Aspermont, TXNTSB ATL80DKQ10Accident · No injuriesClosedCessna 188B · Leland, MSNTSB NYC80FA048Accident · Serious injuriesClosedPiper PA-18 · Patten, MENTSB MKC80DCG29Accident · Minor injuriesClosedCessna 188 · Cameron, MONTSB FTW80FRA40Accident · No injuriesClosedCessna 188 · Sandy Point, TXNTSB CHI80FEC27Accident · No injuriesClosedCessna 177 · South Lyon, MINTSB NYC80FHA20Accident · No injuriesClosedPiper PA-22 · Hallstead, PANTSB LAX80FVM33Accident · Minor injuriesClosedPiper PA-32R · San Carlos, CANTSB DEN80FTE60Accident · No injuriesClosedPiper PA-30 · Elbert, CONTSB ANC80FA056Accident · 1 fatalClosedPiper PA-18 · Anchorage, AKNTSB ATL80FA060Accident · Minor injuriesClosedPiper PA32RT · Cape Charles, VANTSB DCA80AA020Accident · 3 fatalClosedLockheed 1049H · Columbus, INNTSB ANC80FAA13Accident · No injuriesClosedPiper PA-18 · Beaver Village, AKNTSB FTW80DPD35Accident · Serious injuriesClosedPiper J-2 · Bangs, TXNTSB FTW80DPD34Accident · Minor injuriesClosedCessna 150M · Graford, TXNTSB LAX80FVG45Accident · No injuriesClosedCessna 185 · Arbuckle, CANTSB ANC80DAG62Accident · Minor injuriesClosedCessna 185 · Emmonak, AKNTSB ATL80FKQ09Accident · No injuriesClosedGrumman G-164B · Clarksdale, MSNTSB MIA80FLD74Accident · No injuriesClosedAero Comndr A-9B · Minneola, FLNTSB CHI80FEK14Accident · Minor injuriesClosedAmerican AA-5A · Antwerp, OHNTSB LAX80FUJ68Accident · 1 fatalClosedCessna 310 · Chandler, AZNTSB DEN80FTE53Accident · No injuriesClosedGrum-Amer AA-5A · Denver, CONTSB ATL80DID23Accident · No injuriesClosedStinson 108-2 · Axton, VANTSB DEN80FA039Accident · 4 fatalClosedAero Comdr 112 · Rd Feathr Lks, CONTSB CHI80DER48Accident · Serious injuriesClosedPiper PA-28 · Tower, MNNTSB FTW80DPG36Accident · No injuriesClosedGrumman G-164 · Cotton Plant, ARNTSB NYC80FHA15Accident · No injuriesClosedCessna 150 · Newton, NJ