Final NTSB investigations, ND
340 cases where the phase of flight was Landing.
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.\"eventStateOrRegion\" = 'ND' AND c.\"eventCountry\" = 'USA'
AND c.\"completionStatus\" = 'Completed'
AND c.\"mKey\" IN (SELECT case_mkey FROM case_phases WHERE main = 550)
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."eventStateOrRegion" = 'ND' AND c."eventCountry" = 'USA'
AND c."completionStatus" = 'Completed'
AND c."mKey" IN (SELECT case_mkey FROM case_phases WHERE main = 550)
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 MKC69F0198Accident · No injuriesClosedCessna 140 · Fargo, NDNTSB MKC69A0011Accident · Serious injuriesClosedPiper PA-32 · Hazen, NDNTSB MKC69F0145Accident · No injuriesClosedMooney M20C · Park River, NDNTSB MKC69D0184Accident · No injuriesClosedPiper PA-22 · Velva, NDNTSB MKC69F0191Accident · No injuriesClosedBeech T-34A · Fargo, NDNTSB MKC69F0093Accident · Minor injuriesClosedStinson 108-3 · Grassy Bute, NDNTSB MKC69F0127Accident · No injuriesClosedCessna 140 · Foxholm, NDNTSB MKC69D0128Accident · No injuriesClosedBeech S35 · Elgin, NDNTSB MKC69D0053Accident · No injuriesClosedPiper PA-32 · Fairmount, NDNTSB MKC69D0219Accident · No injuriesClosedCessna 150 · Fort Rice, NDNTSB MKC69D0107Accident · No injuriesClosedPiper PA-28 · Hazen, NDNTSB MKC69F0046Accident · No injuriesClosedCessna 195A · Minot, NDNTSB MKC69D0020Accident · No injuriesClosedMooney M20E · Bottineau, NDNTSB MKC69F0049Accident · No injuriesClosedCessna 140A · Mandan, NDNTSB MKC69F0002Accident · No injuriesClosedCessna 150 · Fargo, NDNTSB MKC68F0512Accident · No injuriesClosedCessna 150 · Grand Forks, NDNTSB MKC68D0554Accident · No injuriesClosedN.American AT-6 · Minot, NDNTSB MKC68F0458Accident · No injuriesClosedPiper PA-22 · Minot, NDNTSB MKC68F0043Accident · No injuriesClosedPiper PA-28 · Langdon, NDNTSB MKC68F0456Accident · No injuriesClosedCessna 310H · Minot, NDNTSB MKC68F0418Accident · No injuriesClosedCessna 170 · Tioga, NDNTSB MKC68F0396Accident · No injuriesClosedPiper PA-22 · Enderlin, NDNTSB MKC68F0340Accident · No injuriesClosedCessna 172 · Gwinner, NDNTSB MKC68F0323Accident · No injuriesClosedPiper J-3 · Douglas, NDNTSB MKC68F0233Accident · Minor injuriesClosedChampion ECA · Jamestown, NDNTSB MKC68F0232Accident · Minor injuriesClosedCessna 172 · Mercer, NDNTSB MKC68F0290Accident · No injuriesClosedPiper PA-24 · Ashley, NDNTSB MKC68A0011Accident · No injuriesClosedPiper PA-24 · Grand Forks, NDNTSB MKC68F0151Accident · No injuriesClosedTaylorcraft BC12-D · Rolette, NDNTSB MKC68A0005Accident · No injuriesClosedBeech C-18S · Grand Forks, NDNTSB MKC68F0096Accident · No injuriesClosedAeronca 11AC · Grafton, NDNTSB MKC68D0116Accident · No injuriesClosedCessna 140 · Rutland, NDNTSB MKC68F0125Accident · No injuriesClosedPiper PA-25 · Regent, NDNTSB MKC68F0057Accident · No injuriesClosedMooney M20C · Minot, NDNTSB MKC67D0512Accident · No injuriesClosedAeronca 7AC · Bowman, NDNTSB MKC67F0492Accident · No injuriesClosedErcoupe 415C · Devils Lake, NDNTSB MKC67D0461Accident · No injuriesClosedPiper PA-23 · Wahpeton, NDNTSB MKC67D0521Accident · No injuriesClosedPiper PA-18 · Wabek, NDNTSB MKC67D0385Accident · No injuriesClosedPiper PA-18 · Kempton, NDNTSB MKC67F0344Accident · No injuriesClosedCessna 150 · Cleveland, NDNTSB MKC67F0299Accident · No injuriesClosedBeech J35 · Grand Forks, NDNTSB MKC67F0266Accident · No injuriesClosedPiper PA22 · Lisbon, NDNTSB MKC67F0224Accident · No injuriesClosedPiper PA-22 · Grand Forks, NDNTSB MKC67D0203Accident · No injuriesClosedErcoupe 415-C · Langdon, NDNTSB MKC67D0161Accident · No injuriesClosedCessna 195 · Dunseith, NDNTSB MKC67F0125Accident · No injuriesClosedCessna 172 · Rock Lake, NDNTSB MKC67D0106Accident · No injuriesClosedPiper PA-28 · Bottineau, NDNTSB MKC67D0126Accident · No injuriesClosedFunk F-23B · Devils Lake, NDNTSB MKC67F0040Accident · No injuriesClosedBeech S35 · Wahpeton, NDNTSB MKC67D0096Accident · No injuriesClosedPiper PA-11 · Adams, ND