sql - 从组中排除第一行

标签 sql oracle

我正在尝试创建一个表,其中包含重复列 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/

相关文章:

java - 从 Java 调用 PL/SQL 函数时为 "SQLException: ORA-06550"

oracle - 从 plsql 代码重定向到新选项卡中的 url

mysql - 使用mysql工作台自动生成自定义ID?

SQL 获取所有列的分隔结果

sql - 在 Oracle 中生成具有 2 个日期之间的时间间隔的行

sql - 如何格式化百分比?

sql - Oracle 脚本 - 物化 View 和同义词

mysql - 使用聚合函数连接两个表

c# - 不只按姓氏搜索

php - 通过在 php 中给定一个特定的 id 来删除多个表