NTSB investigations
18,851 cases where the phase of flight was Maneuvering.
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 = 450)
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 = 450)
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 SEA81FYM46Accident · 1 fatalClosedDruine D-31 · Corvallis, ORNTSB NYC81FGT12Accident · 1 fatalClosedChampion 7KCAB · Towanda, PANTSB FTW81FA144Accident · 1 fatalClosedTaylorcraft BC12-D · Kerrville, TXNTSB DEN81FTA14Accident · Minor injuriesClosedPiper PA-18 · Zortman, MTNTSB ATL81DLA14Accident · No injuriesClosedRockwell S-2R · Pelham, GANTSB MIA81FA115Accident · 4 fatalClosedBeech 19A · Horseshoe Bch, FLNTSB LAX81FUM20Accident · Serious injuriesClosedRockwell S-2R · El Centro, CANTSB LAX81DVA63Accident · No injuriesClosedAyres S2R · Huron, CANTSB DEN81FTE70Accident · 1 fatalClosedChristen Eagle · Longmont, CONTSB SEA81DYP40Accident · No injuriesClosedEagle DW-1 · Chelan, WANTSB LAX81FVA62Accident · 1 fatalClosedAero Comdr 600S2R · Kettleman City, CANTSB DEN82FTG01Accident · No injuriesClosedPietsch GJ · Minot, NDNTSB NYC81FHJ17Accident · No injuriesClosedBell 47G-2 · Farmingdale, NYNTSB FTW81FRD44Accident · Serious injuriesClosedCessna A188B · Port Barre, LANTSB LAX81FVD43Accident · Minor injuriesClosedHiller Acft UH-12E · Brentwood, CANTSB FTW81DQG61Accident · No injuriesClosedPiper PA-25 · Idalou, TXNTSB ATL81FLJ17Accident · 1 fatalClosedCessna 188B · Edenton, NCNTSB LAX81DVM30Accident · Minor injuriesClosedHughes 269C · Aptos, CANTSB CHI81DA097Accident · 1 fatalClosedCessna 152 · Bemidji, MNNTSB NYC81FGM29Accident · Minor injuriesClosedBell 47G-2A · Garland, PANTSB CHI81FEC44Accident · 1 fatalClosedLuscombe 8A · Farmington, MINTSB ATL81FKW26Accident · Serious injuriesClosedTaylorcraft DCO-65 · Pleasant View, TNNTSB CHI81FEP44Accident · 1 fatalClosedSteen Skyblt · Hartford, WINTSB ATL81FID20Accident · 1 fatalClosedPiper PA-25 · Sandston, VANTSB LAX81DUK02Accident · No injuriesClosedBell 47G-5 · Yuma, AZNTSB FTW81DRJ34Accident · No injuriesClosedCallair A-5 · Cottonport, LANTSB CHI81FA095Accident · 2 fatalClosedPiper PA-18 · Chippewa Falls, WINTSB NYC81FA079Accident · 2 fatalClosedRobinson R-22 · Granby, CTNTSB MKC81DCJ27Accident · No injuriesClosedPiper PA-25 · Lodgepole, NENTSB ATL81DLA11Accident · Minor injuriesClosedBell 47G-2 · Quitman, GANTSB SEA81DYA27Accident · No injuriesClosedAerospatle SA316B · Driggs, IDNTSB LAX81DUJ91Accident · Minor injuriesClosedGrumman G-164B · Tonapah, AZNTSB FTW81FPA17Accident · 1 fatalClosedPitts S-1C · Plano, TXNTSB ATL81FA111Accident · 2 fatalClosedMooney M20C · Thomasville, NCNTSB SEA81DYP37Accident · No injuriesClosedHughes 369D · Leavenworth, WANTSB FTW81FRJ33Accident · No injuriesClosedCessna T188C · Monroe, LANTSB FTW81FQG58Accident · Serious injuriesClosedPiper PA-36 · Gruver, TXNTSB FTW81FQG57Accident · Serious injuriesClosedPitts S-1S · Clovis, NMNTSB DEN81FTE68Accident · Serious injuriesClosedBell 206B · Rio Blanco, CONTSB ATL81DKG44Accident · Serious injuriesClosedPiper PA-25 · Fort Valley, GANTSB NYC81FNC20Accident · No injuriesClosedBoeing A75L · Fryeburg, MENTSB FTW81FRJ31Accident · 1 fatalClosedCessna 188B · Winnsboro, LANTSB ATL81FID16Accident · Serious injuriesClosedCessna 188B · Pungo, VANTSB NYC81FHM15Accident · Minor injuriesClosedGyro Sport 1-39 · Lincoln Park, NJNTSB DEN81FA061Accident · 3 fatalClosedPiper PA-28 · 40 Mi S Casper, WYNTSB FTW81DPG62Accident · No injuriesClosedPiper PA-38 · Grubbs, ARNTSB CHI81FEV34Accident · Minor injuriesClosedCessna 150M · Wyoming, ILNTSB DEN81FTE67Accident · Minor injuriesClosedCessna 172RG · Walden, CONTSB NYC81FGT10Accident · No injuriesClosedBrantly B-2B · New Cumberland, PANTSB LAX81FUJ88Accident · 1 fatalClosedAir Tractor AT-302 · Phoenix, AZ