我正在尝试创建一个表,其中包含重复列 ACCIDENT_REC_NUM 和 VEHICLE_REC_NUM 的所有行的编码号 (REC_NUM)。所以我需要从可以按这两个字段分组的所有行中获取代码。
这部分没问题,你可以通过这个查询来检查:
SELECT COUNT(REC_NUM) FROM SEQUENCE_EVENT WHERE ACCIDENT_REC_NUM IN (
SELECT ACCIDENT_REC_NUM
FROM (
select ACCIDENT_REC_NUM, VEHICLE_REC_NUM, COUNT(*) AS REPEAT from SEQUENCE_EVENT
GROUP BY ACCIDENT_REC_NUM, VEHICLE_REC_NUM
)
WHERE REPEAT > 1
)
所以,现在我必须排除每个组的第一行,因为我只需要重复行的 REC_NUM,所以第一行就可以了。
最佳答案
我强烈建议您使用分析函数来完成此操作。我认为以下内容明确地满足了您的要求:
select count(*)
from (select se.*,
count(*) over (partition by accident_rec_num, vehicle_rec_num) as repeat,
row_number() over (partition by accident_rec_num, vehicle_rec_num
order by rec_num) as seqnum
from sequence_event se
) t
where repeat > 1 and seqnum > 1;
我不能 100% 确定这是准确的查询,因为我不确定事故和车辆号码如何相互作用。
关于sql - 从组中排除第一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24173757/