在一列中选择具有相同值但在第二列中具有不同值的行

时间:2015-05-07 06:35:46

标签: sql oracle plsql greatest-n-per-group

我正在使用PL-SQL。我有一个名为objectlist的表。在此表中,我有序列号,名为changeno,每个都有生产日期。

我看到一些序列号的生产日期不同。我想列出具有不同生产日期的序列号

假设序列1234在表格中有两个生产日期。所以,我的sql应该显示为

1234   12.01.2015   
1234   01.12.2015

我不知道哪个系列产品有多个生产日期。请告诉我如何找到这个。

1 个答案:

答案 0 :(得分:1)

其中一种可能性是使用分析函数count()

select changeno, pdate 
  from (
    select changeno, pdate, count(1) over (partition by changeno) cnt 
      from objectlist )
  where cnt > 1 order by changeno, pdate

SQLFiddle demo

如果你在PLSQL中需要这个,而不是把这个查询放在过程,函数或块中:

begin 
  for c in (
    select changeno, pdate 
      from (
        select changeno, pdate, count(1) over (partition by changeno) cnt 
          from objectlist )
      where cnt > 1 order by changeno, pdate )
  loop
    dbms_output.put_line(lpad(c.changeno, 10)||' '||c.pdate);
  end loop;
end;