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 SEA76FYC48Accident · No injuriesClosedAero Comdr 600S2R · Hermiston, ORNTSB FTW76FPM19Accident · No injuriesClosedPiper PA-28 · Quinton, OKNTSB OAK76FXQ39Accident · No injuriesClosedBede BD-5 · Reno, NVNTSB OAK76AP052Accident · 2 fatalClosedLuscombe 8A · Watsonville, CANTSB NYC76FHM26Accident · No injuriesClosedAeronca S7CCM · Moonachie, NJNTSB MIA76FKT74Accident · No injuriesClosedCessna 150 · Homestead, FLNTSB NYC76FHJ18Accident · No injuriesClosedErco 415-C · East Moriches, NYNTSB IAD76DLT10Accident · No injuriesClosedBeech B19 · Covington, TNNTSB FTW76DQD22Accident · No injuriesClosedPiper PA-28 · Sanderson, TXNTSB IAD76FLQ20Accident · No injuriesClosedPiper PA-31P · Paintsville, KYNTSB FTW76AF090Accident · 3 fatalClosedCessna 310 · Ardmore, OKNTSB CHI76FEP29Accident · Minor injuriesClosedCessna 182K · Lake Geneva, WINTSB CHI76FEA30Accident · No injuriesClosedCessna 150L · Bloomington, INNTSB MKC76DER62Accident · No injuriesClosedCessna 172A · Hadley, MNNTSB MIA76AM080Accident · 1 fatalClosedGlobe GC-1B · Valdosta, GANTSB FTW76FRG48Accident · No injuriesClosedVolksplane VP-1 · San Antonio, TXNTSB LAX76FUJ70Accident · No injuriesClosedLuscombe 8A · Chandler, AZNTSB FTW76FPM18Accident · No injuriesClosedAmer Avco AA1-B · Cookson, OKNTSB DEN76FQA43Accident · Serious injuriesClosedPiper PA-32 · Albuquerque, NMNTSB SEA76DYG45Accident · No injuriesClosedBoeing E75N1 · Kennewick, WANTSB MKC76DTG14Accident · Minor injuriesClosedPiper PA-36 · Argusville, NDNTSB FTW76FRJ21Accident · No injuriesClosedPiper PA-25 · Crowville, LANTSB OAK76DVG67Accident · Minor injuriesClosedGrumman G-164 · Richvale, CANTSB NYC76FFJ20Accident · Minor injuriesClosedPiper PA-28 · Canandaigua, NYNTSB NYC76FNC46Accident · No injuriesClosedCessna 305A · Warren, VTNTSB NYC76FHD28Accident · Serious injuriesClosedPiper PA-24 · Cross Keys, NJNTSB IAD76AI066Accident · 1 fatalClosedCessna 310D · Sandston, VANTSB MIA76DKG54Accident · No injuriesClosedPiper PA-18 · Leesburg, GANTSB NYC76FHA32Accident · No injuriesClosedCessna 170A · Pittstown, NJNTSB MIA76AM077Accident · 1 fatalClosedErco 415-C · Plant City, FLNTSB DEN76FTE60Accident · No injuriesClosedCessna 140 · Peyton, CONTSB MIA76AM076Accident · 2 fatalClosedLockheed 18-56 · Brighton, FLNTSB LAX76FUM24Accident · No injuriesClosedCessna 150J · Fallbrook, CANTSB ANC76FAA32Accident · No injuriesClosedPiper PA-18 · Tok, AKNTSB LAX76FUQ31Accident · No injuriesClosedBeech B35 · Sepulveda, CANTSB LAX76DUJ67Accident · No injuriesClosedCessna 210 · Wilcox, AZNTSB CHI76FEI27Accident · No injuriesClosedUniv Acft 108-2 · Thompson, OHNTSB CHI76FEC38Accident · Serious injuriesClosedCessna 175 · Lansing, MINTSB MKC76FCD36Accident · No injuriesClosedPiper PA-24 · Eagle Grove, IANTSB DEN76FTC28Accident · Serious injuriesClosedCessna 140 · Green River, WYNTSB CHI76FEI24Accident · Minor injuriesClosedGrum Amer AA-5 · Akron, OHNTSB SEA76FYC36Accident · No injuriesClosedPiper PA-24 · Estacada, ORNTSB MIA76FKG51Accident · Serious injuriesClosedHughes 269A · Comer, GANTSB NYC76AN091Accident · 3 fatalClosedBeech 95-B55 · Ischua, NYNTSB DEN76AD046Accident · 2 fatalClosedCessna 340 · Ruidoso, NMNTSB ANC76DAA30Accident · No injuriesClosedCessna 170 · North Pole, AKNTSB OAK76FVA49Accident · Minor injuriesClosedCessna 170B · Fresno, CANTSB ANC76DAG99Accident · No injuriesClosedCessna 180 · Port Alsworth, AKNTSB FTW76FRD32Accident · No injuriesClosedPiper PA-36 · Palmetto, LANTSB NYC76FNA31Accident · Minor injuriesClosedCessna 172 · Tewksbury, MA