【问题标题】:For duplicate values in SQL, how do I choose the most recent duplicate valueSQL中的重复值,如何选择最近的重复值
【发布时间】:2016-07-24 14:23:28
【问题描述】:

在 SQL 中,我有一个表,其中一列可以有重复值。如何仅选择最近的重复值?日期分布在一个月内

这是我当前的代码,不考虑重复值(注意:COLUMN1 是具有重复值的列)

select count(distinct COLUMN1)
from TABLE
where extract(month from DATE_COLUMN) = extract(month from sysdate) - 1
and extract(year from DATE_COLUMN) = extract(year from sysdate)
and COLUMN1 not like '%X';

谢谢

【问题讨论】:

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


    【解决方案1】:

    您可以在子查询中使用 ROW_NUMBER() 函数来识别受骗者并按日期列对其进行排名。我对 oracle 不熟悉,但应该是这样的:

    SELECT ROW_NUMBER() OVER(PARTITION BY COLUMN1 ORDER BY DATE_COLUMN DESC)
    

    查看此链接以获得解释: https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions137.htm

    【讨论】:

      【解决方案2】:

      您可以使用ROW_NUMBER() 分析函数获取column1 的每个值的最新行:

      SELECT *
      FROM   (
        SELECT t.*,
               ROW_NUMBER() OVER ( PARTITION BY column1
                                   ORDER BY date_column DESC ) AS rn
        FROM   table_name
      )
      WHERE  rn = 1;
      

      【讨论】:

        【解决方案3】:

        我最终以与向我建议的方式不同的方式执行此操作。我基本上创建了一个包含两个不同表的表,一个具有重复值,另一个没有。

        select DATECOLUMN, count(COLUMN1)
        FROM (select COLUMN1, max(DATECOLUMN) "DATECOLUMN"
              from TABLE
              where extract(month from DATECOLUMN) = extract(month from sysdate) - 1
              and extract(year from DATECOLUMN) = extract(year from sysdate)
              group by COLUMN1
              HAVING count(COLUMN1) > 1
              UNION
              select COLUMN1, max(DATECOLUMN) "DATECOLUMN"
              from TABLE 
              where extract(month from DATECOLUMN) = extract(month from sysdate) - 1
              and extract(year from DATECOLUMN) = extract(year from sysdate)
              group by COLUMN1
              HAVING count(COLUMN1) < 2) "NEW_TABLE"
        where COLUMN1 not like '%X'
        group by DATECOLUMN
        order by DATECOLUMN;
        

        【讨论】:

          猜你喜欢
          • 2021-07-25
          • 2017-08-11
          • 1970-01-01
          • 1970-01-01
          • 2014-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-16
          相关资源
          最近更新 更多