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 LAX81FUQ12Accident · Serious injuriesClosedCessna T210 · Pinon Hills, CANTSB SEA81FA019Accident · 1 fatalClosedPiper PA-28 · Seattle, WANTSB MKC81FA022Accident · 2 fatalClosedAmer Avco AA-1A · Council Bluffs, IANTSB LAX81DVA23Accident · No injuriesClosedHiller UH-12E · Exeter, CANTSB MKC81FA020Accident · 2 fatalClosedGrum-Amer AA-5 · Thayer, MONTSB FTW81FA036Accident · 1 fatalClosedLuscombe 8A · Bixby, OKNTSB MKC81FA019Accident · 1 fatalClosedCessna 172 · Lawrence, KSNTSB LAX81FVG18Accident · Serious injuriesClosedGrumman G-164B · Robbins, CANTSB DEN81DTM09Accident · No injuriesClosedHughes 269C · Moab, UTNTSB SEA81FYP05Accident · Serious injuriesClosedPiper PA-25 · Mesa, WANTSB MKC81DCQ11Accident · No injuriesClosedCessna 188 · Plains, KSNTSB DEN81FTE19Accident · 1 fatalClosedPiper PA-18 · Alamosa, CONTSB MKC81DCQ10Accident · Serious injuriesClosedPiper PA-18 · Manhattan, KSNTSB LAX81DUJ31Accident · No injuriesClosedSikorsky S-55 · Poston, AZNTSB LAX81FA038Accident · No injuriesClosedRobinson R22 · Long Beach, CANTSB NYC81FA021Accident · 1 fatalClosedCessna 150 · Montclair, NJNTSB MIA81FA037Accident · 2 fatalClosedGlobe GC-1B · Englewood, FLNTSB CHI81FET03Accident · No injuriesClosedPiper PA-28 · Michigan City, INNTSB LAX81FUJ27Accident · 2 fatalClosedGrum Amer AA-5B · Bullhead City, AZNTSB LAX81DVA20Accident · No injuriesClosedAero Condr S2R · Corcoran, CANTSB SEA81FYA07Accident · 1 fatalClosedPitts S-1S · Boise, IDNTSB FTW81FA023Accident · 5 fatalClosedBell 206B · Norman, OKNTSB LAX81DVG11Accident · Serious injuriesClosedCessna 188T · Isleton, CANTSB MIA81FA031Accident · 2 fatalClosedPiper PA-18A · Lake Wales, FLNTSB LAX81FUM09Accident · 1 fatalClosedCessna 150 · Crest, CANTSB ATL81FA030Accident · 6 fatalClosedCessna 172M · Aberdeen, MSNTSB LAX81FA023Accident · 1 fatalClosedCitabria 7KCAB · Truckee, CANTSB SEA81DYK02Accident · Minor injuriesClosedHughes 369 · Powers, ORNTSB LAX81DVM07Accident · No injuriesClosedPitts S-1S · Paso Robles, CANTSB MIA81FA024Accident · 2 fatalClosedPiper PA-23 · Fort Myers, FLNTSB LAX81DVA14Accident · No injuriesClosedCessna 188 · Huron, CANTSB LAX81FUQ04Accident · 1 fatalClosedBakeng Double · Rosamond, CANTSB SEA81DYP04Accident · No injuriesClosedHughes 269B · Ephrata, WANTSB LAX81FVM04Accident · Minor injuriesClosedPiper PA-28 · Carmel Valley, CANTSB DEN81DTG03Accident · No injuriesClosedHiller Acft UH-12E · Watford City, NDNTSB FTW81FRA07Accident · No injuriesClosedBoeing E75 · Nome, TXNTSB ATL81FKW05Accident · 2 fatalClosedVarieze 1 · Signal Mt, TNNTSB NYC81FA009Accident · 1 fatalClosedCessna U206 · West Hurley, NYNTSB SEA81FA058Accident · 4 fatalClosedCessna 172M · Quinault, WANTSB FTW81DPJ06Accident · No injuriesClosedHughes 269B · Guymon, OKNTSB FTW81FQG04Accident · No injuriesClosedHughes 269B · Girard, TXNTSB CHI81FER03Accident · No injuriesClosedPiper PA-18 · Brainerd, MNNTSB MKC81DCQ03Accident · No injuriesClosedCassutt 3M · Liberal, KSNTSB LAX81FVW02Accident · Serious injuriesClosedFokker DR1 · Henderson, NVNTSB LAX81DVA08Accident · No injuriesClosedGrumman G-164A · Bakersfield, CANTSB MIA81FA006Accident · 2 fatalClosedBellanca 8KCAB · Ft Lauderdale, FLNTSB ATL81FKQ02Accident · No injuriesClosedAir Tractor AT-301 · Canton, MSNTSB LAX81FVA06Accident · Serious injuriesClosedRockwell S2R · Maricopa, CANTSB LAX81FA007Accident · No injuriesClosedBell 212 · City Of Indust, CANTSB FTW81FPJ03Accident · Serious injuriesClosedPiper PA-38 · Hammon, OK