Как сгруппировать повторяющиеся записи?
У меня есть единственный столбец, который обозначает, является ли запись началом, концом или детальной записью. Подробные записи - это записи, которые существуют после начальной записи и перед конечной записью.
Я хочу сгруппировать эти записи вместе с уникальным идентификатором, чтобы каждый раз, когда есть конечная запись, следующая серия записей получала новый идентификатор группы.
Я пробовал серию самостоятельных соединений, подзапросов и cte Не создавая настраиваемой функции, представления или CTE, я надеюсь создать это в одном запросе выбора.
Любые советы или указатели очень ценятся.
Пример перед решением:
--------------------------------------------------
| ID | RecordType | SomeValue
--------------------------------------------------
|001 | Start record | some header info
|002 | Detail Record | value
|003 | Detail Record | value
|004 | Detail Record | value
|005 | End Record | some other header info
|006 | Start Record | some header info
|007 | Detail Record | Value
|008 | End Record | some other header info
Чего я пытаюсь достичь:
------------------------------------------------------------------
| ID | RecordType | SomeValue | RecordGroup
------------------------------------------------------------------
|001 | Start record | some header info | 001
|002 | Detail Record | value | 001
|003 | Detail Record | value | 001
|004 | Detail Record | value | 001
|005 | End Record | some other header info| 001
|006 | Start Record | some header info | 002
|007 | Detail Record | Value | 002
|008 | End Record | some other header info| 002
Вы можете использовать функцию LAG
и запустить SUM
. Ниже предполагается, что секционирование отсутствует, а строки упорядочены по идентификатору:
SELECT ID, RecordType, SomeValue,
SUM(chg) OVER (ORDER BY ID) AS grp
FROM (
SELECT ID, RecordType, SomeValue,
CASE WHEN LAG(RecordType) OVER (ORDER BY ID) IN ('Start record', 'Detail Record') THEN 0 ELSE 1 END AS chg
FROM t
) cte1
Большое спасибо за вашу помощь, добавлю это в мою библиотеку сценариев.
@Flat_Cap_Hat вот как ты говоришь спасибо ... если помогло конечно.
Остров Google SQL и проблема с пробелами?