如何将重复记录分组?
我只有一栏表示记录是开始记录,结束记录还是明细记录。明细记录是在开始记录之后和结束记录之前存在的记录。
我想将这些记录与唯一的标识符归为一组,以便每次出现结束记录时,下一个记录系列都会获得一个新的组ID。
我尝试了一系列的自我联接,子查询和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
答案 0 :(得分:1)
您可以使用LAG
函数并运行SUM
。以下假设没有分区,并且行按ID排序:
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