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 FTW76FPG47Accident · No injuriesClosedCessna 172 · Brinkley, ARNTSB FTW76AF089Accident · 2 fatalClosedPiper PA-28 · Lenorah, TXNTSB MKC76FCA21Accident · Minor injuriesClosedBoeing B75N1 · St Charles, MONTSB IAD76FIG14Accident · No injuriesClosedGrumman G-164A · Downsville, MDNTSB DEN76FTM28Accident · No injuriesClosedPiper PA-18 · Tooele, UTNTSB MKC76OCQ48Accident · No injuriesClosedPiper PA-25 · Norton, KSNTSB MIA76AM079Accident · 3 fatalClosedPiper PA-28 · Dauphin Island, ALNTSB LAX76A6073Accident · 2 fatalClosedBeech B24R · Grand Canyon, AZNTSB FTW76AF088Accident · 2 fatalClosedErco 415-C · Brentwood, ARNTSB MKC76DCG70Accident · Minor injuriesClosedCallair A-9 · Atchison, KSNTSB MIA76FLD52Accident · No injuriesClosedBoeing A75N1 · Sarasota, FLNTSB NYC76FHD25Accident · No injuriesClosedEnstrom F-28A · Brigantine, NJNTSB NYC76FHA26Accident · Minor injuriesClosedCessna 150 · Bushkill, PANTSB NYC76AN092Accident · 1 fatalClosedPiper PA-24 · Orrington, MENTSB MKC76FCQ44Accident · No injuriesClosedBeech C35 · Mankato, KSNTSB NYC76FFA32Accident · Serious injuriesClosedGilmore 3D · Castleton, NYNTSB NYC76FFA31Accident · No injuriesClosedPiper PA-17 · Vernon, NYNTSB MIA76FKA04Accident · Serious injuriesClosedCessna 150 · St Thomas, VINTSB MKC76FCD37Accident · 1 fatalClosedTecumseh Spec · Madrid, IANTSB MIA76FLD50Accident · 1 fatalClosedPitts S1-C · Merritt Island, FLNTSB FTW76FRJ19Accident · Serious injuriesClosedAeronca 7AC · Transylvania, LANTSB FTW76FPM17Accident · Minor injuriesClosedTaylorcraft BC12-D · Vian, OKNTSB IAD76FKW28Accident · No injuriesClosedPiper PA-25 · Springfield, TNNTSB FTW76DRA30Accident · No injuriesClosedGrumman G-164A · Damon, TXNTSB SEA76DYG42Accident · No injuriesClosedGrumman G-164A · Nezperce, IDNTSB SEA76DTI23Accident · No injuriesClosedGrumman G-164A · Chester, MTNTSB LAX76DVA57Accident · No injuriesClosedGrumman G-164A · Bakersfield, CANTSB CHI76FEI28Accident · 1 fatalClosedPiper J5A · Lyons, OHNTSB CHI76AEM34Accident · Minor injuriesClosedPiper PA-25 · Edmore, MINTSB SEA76DYC39Accident · No injuriesClosedGrumman G-164 · Condon, ORNTSB MKC76FCJ32Accident · No injuriesClosedBell 47G-5 · Geneva, NENTSB MIA76FKQ28Accident · No injuriesClosedCessna 188 · Webb, MSNTSB SEA76FYC37Accident · Serious injuriesClosedCallair A-9B · Pendelton, ORNTSB OAK76FVD28Accident · 1 fatalClosedBreezy · Sonoma, CANTSB CHI76FEG12Accident · Serious injuriesClosedHughes 269A · West Charlestn, OHNTSB FTW76DRA27Accident · No injuriesClosedAero Comdr 600S2R · Markham, TXNTSB NYC76FHD22Accident · No injuriesClosedGrumman G-164 · Frederick, DENTSB FTW76AF080Accident · 2 fatalClosedBeech B23 · Richmond, TXNTSB DEN76AD045Accident · 2 fatalClosedLuscombe 8A · Atwood, CONTSB OAK76FVA51Accident · 1 fatalClosedCessna 188C · Lemoore, CANTSB IAD76FIG13Accident · Serious injuriesClosedPiper J3C-65 · Mt Airy, MDNTSB FTW76FRD34Accident · No injuriesClosedGrumman G-164A · Elton, LANTSB CHI76FEC35Accident · No injuriesClosedBell 47G-2 · Whitmore Lake, MINTSB ANC76FAH02Accident · No injuriesClosedBellanca 7GCBC · Palmer, AKNTSB LAX76FUJ65Accident · No injuriesClosedBellanca 8KCAB · Goodyear, AZNTSB FTW76AF074Accident · 1 fatalClosedPiper PA-28 · Ballinger, TXNTSB MKC76FCD33Accident · No injuriesClosedPitts S-1S · Harlan, IANTSB LAX76FVA47Accident · 1 fatalClosedGrumman G-164A · Bakersfield, CANTSB LAX76AL064Accident · 1 fatalClosedCessna 182J · Gila Bend, AZNTSB MKC76FCD31Accident · No injuriesClosedBell 47G-2 · Dows, IA