Below is for BigQuery Standard SQL
#standardSQL
SELECT str FROM (
SELECT str,
STARTS_WITH(LAG(str) OVER(ORDER BY str DESC), str) flag
FROM `project.dataset.table`
)
WHERE NOT IFNULL(flag, FALSE)
I tested above with dummy data similar to what you provided in your question
#standardSQL
WITH `project.dataset.table` AS (
SELECT 'anderstand' str UNION ALL
SELECT 'anderstan' UNION ALL
SELECT 'andersta' UNION ALL
SELECT 'anderst' UNION ALL
SELECT 'understand' str UNION ALL
SELECT 'understan' UNION ALL
SELECT 'understa' UNION ALL
SELECT 'underst' UNION ALL
SELECT 'unders' UNION ALL
SELECT 'under'
)
SELECT str FROM (
SELECT str,
STARTS_WITH(LAG(str) OVER(ORDER BY str DESC), str) flag
FROM `project.dataset.table`
)
WHERE NOT IFNULL(flag, FALSE)
with result
Row str
1 understand
2 anderstand
which I believe is exactly what you expected