NTSB investigations
18,850 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 MKC72DCG06Accident · No injuriesClosedPiper PA-18A · Bolivar, MONTSB MKC71FTG30Accident · Minor injuriesClosedPiper PA-11 · Petersburg, NDNTSB LAX71FUJ97Accident · Serious injuriesClosedCessna A188 · Eloy, AZNTSB MKC71FER67Accident · No injuriesClosedChampion 7GC · Windom, MNNTSB LAX71FUJ98Accident · No injuriesClosedNaval Fcty N3N-3 · Stanfield, AZNTSB MKC71DTG28Accident · Serious injuriesClosedPiper PA-25 · Devils Lake, NDNTSB MIA71DLD67Accident · Minor injuriesClosedTaylorcraft BC12-D · Oak Hill, FLNTSB FTW71FRD50Accident · Serious injuriesClosedCessna 188 · Church Point, LANTSB FTW71AF079Accident · 2 fatalClosedAeronca 7CCM · Borger, TXNTSB SEA71FYC41Accident · No injuriesClosedHughes 269A · Wilsonville, ORNTSB MKC72DCA08Accident · No injuriesClosedPiper PA-25 · Kennett, MONTSB OAK71AP048Accident · 2 fatalClosedChampion 7KCAB · Antioch, CANTSB CHI71DEP52Accident · No injuriesClosedPiper PA-25 · Random Lake, WINTSB FTW71FRA58Accident · No injuriesClosedPiper PA-25 · Rosharon, TXNTSB SEA71DYG55Accident · No injuriesClosedPiper PA-25 · Lind, WANTSB IAD71DLJ26Accident · No injuriesClosedCallair A-9 · Aurora, NCNTSB OAK71DVG78Accident · No injuriesClosedThorp T-18 · Lake Head, CANTSB CHI71FEE74Accident · No injuriesClosedBoeing A75N1 · Wauconda, ILNTSB SEA71AS044Accident · 2 fatalClosedPiper PA-18 · Adel, ORNTSB OAK71FJA17Accident · No injuriesClosedHughes 269A · Ewa, HINTSB OAK71AP046Accident · 2 fatalClosedCessna 150 · Minden, NVNTSB FTW71FPM28Accident · Minor injuriesClosedPiper PA-18A · Okemah, OKNTSB MKC71FTK30Accident · Minor injuriesClosedCallair A-9 · Philip, SDNTSB LAX71DUM42Accident · No injuriesClosedGrumman G-164 · Pala, CANTSB FTW71DPG56Accident · No injuriesClosedPiper PA-25 · Waldenburg, ARNTSB CHI71FLQ24Accident · No injuriesClosedAero Comdr A-9 · Morganfield, KYNTSB FTW71DRD48Accident · No injuriesClosedBoeing A75 · Rayne, LANTSB FTW71AF077Accident · 1 fatalClosedCessna 150 · Langley, OKNTSB FTW71FPG54Accident · No injuriesClosedPiper PA-18 · Dewitt, ARNTSB SEA71AS042Accident · 1 fatalClosedGlobe GC-1B · Monroe, WANTSB OAK71AP044Accident · 1 fatalClosedPiper PA-28 · Petaluma, CANTSB FTW71FRA53Accident · Minor injuriesClosedGrumman G-164 · Anahuac, TXNTSB CHI71FEV42Accident · Minor injuriesClosedPiper PA-25 · Vandalia, ILNTSB SEA71FTA19Accident · 1 fatalClosedPitts Spec SC-1 · Lewiston, MTNTSB NYC71AN109Accident · 3 fatalClosedCessna 180 · Tarentum, PANTSB MIA71AM095Accident · 1 fatalClosedAeronca 7BCM · Headland, ALNTSB MKC71DCQ39Accident · No injuriesClosedPiper PA-25 · Yates Center, KSNTSB MKC71DCQ38Accident · Minor injuriesClosedPiper PA-25 · Morrowville, KSNTSB FTW71DRJ33Accident · Minor injuriesClosedPiper PA-25 · Lake Providnce, LANTSB MIA71DKT60Accident · No injuriesClosedSikorsky S-51 · Ft Lauderdale, FLNTSB FTW71FRA51Accident · Serious injuriesClosedBoeing E-75 · Stowell, TXNTSB LAX71FUJ99Accident · 1 fatalClosedDouglas B-26 · Sprngrville, AZNTSB MKC71DCG62Accident · No injuriesClosedCallair A-6 · Tonganoxie, KSNTSB FTW71FPM24Accident · No injuriesClosedAeronca 11AC · Vinita, OKNTSB FTW71DRD44Accident · Serious injuriesClosedBoeing E75 · Reeves, LANTSB FTW71FRH18Accident · Minor injuriesClosedCessna 150H · Wimberley, TXNTSB MKC71DCA34Accident · No injuriesClosedBell 47G2 · Wayland, MONTSB SEA71FYG48Accident · No injuriesClosedSnow 600S2C · Pasco, WANTSB SEA71FYC38Accident · No injuriesClosedBell 47G-3B · Elgin, ORNTSB MKC71FCD79Accident · Serious injuriesClosedPiper J4-A · Clear Lake, IA