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 NYC68A0044Accident · No injuriesClosedBell 47G-2 · Shippensburg, PANTSB MIA68F0213Accident · No injuriesClosedPiper PA-25 · Midville, GANTSB FTW68A0031Accident · 1 fatalClosedBoeing N2S-3 · Lake Charles, LANTSB FTW68D0225Accident · No injuriesClosedPiper PA-18 · Columbia, LANTSB OAK68D0123Accident · Minor injuriesClosedBoeing A75 · Huron, CANTSB FTW68F0260Accident · No injuriesClosedCallair A9 · Howell, ARNTSB FTW68F0224Accident · Serious injuriesClosedPiper PA-18 · Sondheimer, LANTSB MIA68D0135Accident · No injuriesClosedPiper PA-25 · Silver City, MSNTSB FTW68F0235Accident · Minor injuriesClosedBoeing E75N1 · Marvell, ARNTSB DEN68F0102Accident · Serious injuriesClosedAero Sport PJ-260 · Brigham City, UTNTSB MKC68A0022Accident · No injuriesClosedHughes 269A · Silver City, IANTSB LAX68A0029Accident · No injuriesClosedBell 47D1 · Long Beach, CANTSB OAK68D0217Accident · Minor injuriesClosedGrumman G-164 · Willows, CANTSB MIA68D0170Accident · Minor injuriesClosedPiper PA-25 · Foley, ALNTSB FTW68F0233Accident · Minor injuriesClosedPiper PA-25 · Hereford, TXNTSB SEA68F0160Accident · Serious injuriesClosedCessna 172 · Skykomish, WANTSB MIA68F0167Accident · No injuriesClosedBoeing A75N1 · Redwood, MSNTSB LAX68D0128Accident · No injuriesClosedTravel Air 4000 · Phoenix, AZNTSB SEA68A0023Accident · 1 fatalClosedLuscombe 8A · Olympia, WANTSB OAK68F0105Accident · Minor injuriesClosedBoeing E75 · Tulare, CANTSB LAX68D0116Accident · No injuriesClosedChampion 7GCA · Blythe, CANTSB MKC68F0228Accident · Minor injuriesClosedPiper PA-25 · Fairfax, MNNTSB NYC68A0039Accident · Minor injuriesClosedBell 47G-5 · Westfield, MENTSB NYC68A0038Accident · No injuriesClosedSikorsky S-55B · Pittsfield, PANTSB MIA68A0027Accident · 1 fatalClosedPiper PA-25 · Taylorsville, FLNTSB FTW68D0258Accident · No injuriesClosedPiper PA-25 · Dimmitt, TXNTSB OAK68D0087Accident · Minor injuriesClosedBoeing A75N1 · Marysville, CANTSB OAK68D0122Accident · Minor injuriesClosedBoeing A75N1 · Ivanhoe, CANTSB MKC68D0184Accident · No injuriesClosedCallair A-9 · Henderson, NENTSB OAK68A0023Accident · 1 fatalClosedTemco GC-1B · Etna, CANTSB LAX68A0026Accident · 2 fatalClosedTimm N2T-1 · Shafter, CANTSB MKC68F0204Accident · Minor injuriesClosedPiper PA-12 · Cloquet, MNNTSB OAK68D0110Accident · Serious injuriesClosedNaval Fcty N3N · Dos Palos, CANTSB SEA68D0086Accident · No injuriesClosedGrumman G-164 · Jerome, IDNTSB OAK68A0019Accident · 1 fatalClosedBoeing B75N1 · Honolulu, HINTSB OAK68D0099Accident · No injuriesClosedBoeing A75 · Visalia, CANTSB MIA68F0148Accident · Serious injuriesClosedPiper J3C-65 · Hollandale, MSNTSB MIA68D0149Accident · Minor injuriesClosedPiper PA-25 · Childersburg, ALNTSB FTW68D0211Accident · No injuriesClosedPiper PA-25 · Pecos, TXNTSB OAK68A0015Accident · Minor injuriesClosedHiller UH-12B · Kingsburg, CANTSB NYC68A0030Accident · 1 fatalClosedBell 47G-5 · Kingston, NHNTSB MIA68A0022Accident · No injuriesClosedBell 47D1 · Glen Allan, MSNTSB MIA68A0021Accident · 1 fatalClosedPiper J3C-65 · Jacks Creek, TNNTSB MIA68F0111Accident · No injuriesClosedPiper PA-18 · Randolph, MSNTSB FTW68D0155Accident · No injuriesClosedBoeing A75N1 · Dumas, ARNTSB NYC68A0029Accident · 1 fatalClosedPiper PA-28 · Petersburg, PANTSB MKC68D0186Accident · No injuriesClosedPiper PA-11 · Pocahontas, IANTSB MIA68F0146Accident · No injuriesClosedPiper PA-18 · Atmore, ALNTSB UNK67X0147Accident · No injuriesClosedBell 47G-5 · Iraklion, GreeceNTSB MIA68D0202Accident · Minor injuriesClosedPiper PA-18 · Sylvester, GA