【问题标题】:the number of same record until this row直到这一行的相同记录的数量
【发布时间】:2011-07-19 09:51:16
【问题描述】:

是否可以使用 oracle pl/sql 检索每行当前相同记录的数量?

例如, 我有一个由 id、name、age 列组成的类表

我想让具有相同姓名和年龄的学生序列进入班级,假设 id 在不改变数据结构的情况下进行反击。

谢谢。

问候,

吉姆

【问题讨论】:

    标签: oracle select plsql count sequence


    【解决方案1】:

    不确定我是否完全得到您的要求;你有一个奇怪的词组。输入数据和预期结果的示例总是有用的。

    大概是这样的:

    select id, name, age
    from   your_table
    where (name, age) in 
       ( select name. age
         from your_table
         group by name, age
         having count(id) > 1 )
    order by name, age, id
    /
    

    您可以通过分析解决这个问题。但是,您仍然需要一个外部查询来过滤掉不重复的记录,所以我不确定您会得到什么:

    select * from (
        select id, name, age
                , count(id) over (partition by name, age) as dup_count
        from   your_table )
    where dup_count > 1
    order by name, age, id
    /
    

    【讨论】:

    • 是的,我正在寻找解析的,但我不确定为什么我必须过滤 dup_count 大于 1。无论如何,非常感谢。
    【解决方案2】:

    我也不确定,但在我看来这与分析函数有关。以此为例,看一下 srlno 列,使用解析函数计算:

    SELECT empno, deptno, hiredate,
    ROW_NUMBER( ) OVER (PARTITION BY
    deptno ORDER BY hiredate
    NULLS LAST) SRLNO
    FROM emp
    WHERE deptno IN (10, 20)
    ORDER BY deptno, SRLNO;
    
    EMPNO  DEPTNO HIREDATE       SRLNO
    ------ ------- --------- ----------
      7782      10 09-JUN-81          1
      7839      10 17-NOV-81          2
      7934      10 23-JAN-82          3
      7369      20 17-DEC-80          1
      7566      20 02-APR-81          2
      7902      20 03-DEC-81          3
      7788      20 09-DEC-82          4
      7876      20 12-JAN-83          5
    

    更多关于分析函数: http://www.orafaq.com/node/55

    请记住,如果您可以使用 SQL 而不是 PL/SQL 来实现您的目标,这是一种更好的方法。

    【讨论】:

    • 如果您将示例代码定制为实际满足 OP 要求的示例,这将是一个更好的答案。
    • @Jai:是的,这就是我要找的。非常感谢。
    • @APC,好的,你说得对。下次我会尝试更适合我的答案! :)
    猜你喜欢
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    • 2016-08-19
    • 2020-07-07
    • 1970-01-01
    相关资源
    最近更新 更多