Я пытаюсь найти однопроходный способ обхода упорядоченного списка слов, ища самое короткое предыдущее слово, с которого начинается текущее слово
По существу в следующем списке:
'APP',3
'APPLE',2
'APPLICATION',7
'BOW',2
'BRA',6
'BRAVE',5
'BRAVERY',3
'CANED',2
'CANES',4
Я бы хотел исключить APPLE, APPLICATION, BRAVE и BRAVERY, но добавить их числовые оценки к корневому слову, с которого они начинаются, поэтому APP набирает 3 + 2 + 7, а BRA - 6 + 5 + 3
'APP',12
'BRA',14
'BOW',2
'CANED',2
'CANES',4
Хотя храбрость начинается с храбрости и бюстгальтера, корень этого слова - бюстгальтер, потому что бюстгальтер короче смельчака
У меня такое ощущение, что это можно сделать, создав столбец, который увеличивается каждый раз, когда текущее слово строки не начинается с какого-либо предыдущего слова строки, а текущее слово строки не длиннее предыдущего слова строки, затем используйте его как раздел. Это бит «с любым предыдущим словом строки», на котором я застрял - по сути, Apple и приложение оба начинаются с приложения, но приложение не начинается с Apple (а храбрость начинается с храброго), поэтому сравнивает непосредственный предыдущая строка как текущая строка не работает
Я не очень беспокоюсь о том, что это за БД; Я использую аналитику MySQL 8 для этого, но это более общий метод, который я использую после того, как я могу с такой же легкостью заставить наш sqlserver или oracle выполнять работу
Я уже могу сделать это с помощью объединений, мне интересно, есть ли способ, позволяющий избежать любого использования присоединений