删除重复项(1到多个)或编写一个解决我的问题的子查询

时间:2011-09-28 19:29:56

标签: sql sql-server-2005 subquery duplicate-removal

参考下图,记录表有唯一的记录。通过更新表中的注释更新每条记录。当我加入这两个时,我得到了很多重复。

  1. 如何删除重复项? Group By对我不起作用,因为我在select查询中有超过10个字段,其中一些是函数。

  2. 编写一个子查询,该查询会在更新表中为特定月份中更新的每条记录提取最新更新。加入这个子查询将解决我的问题。

  3. 谢谢!

    修改 感兴趣的表结构是

    create table Records(
    recordID int,
    90more_fields various
    )
    
    create table Updates(
    update_id int,
    record_id int,
    comment text,
    byUser varchar(25),
    datecreate datetime
    )
    

    enter image description here

3 个答案:

答案 0 :(得分:1)

这是一种方式。

SELECT * /*But list columns explicitly*/
FROM   Orange o
       CROSS APPLY (SELECT TOP 1 *
                    FROM   Blue b
                    WHERE  b.datecreate >= '20110901'
                           AND b.datecreate < '20111001'
                           AND o.RecordID = b.Record_ID2
                    ORDER  BY b.datecreate  DESC) b 

答案 1 :(得分:0)

基于现有的有限信息......

WITH cteLastUpdate AS (
    SELECT Record_ID2, UpdateDateTime, 
           ROW_NUMBER() OVER(PARTITION BY Record_ID2 ORDER BY UpdateDateTime DESC) AS RowNUM
        FROM BlueTable
        /* Add WHERE clause if needed to restrict date range */
)
SELECT *
    FROM cteLastUpdate lu
        INNER JOIN OrangeTable o
            ON lu.Record_ID2 = o.RecordID
    WHERE lu.RowNum = 1

答案 2 :(得分:0)

每个记录和月份的最新更新:

SELECT *
  FROM UPDATES outerUpd
 WHERE exists
 (
      -- Magic part
      SELECT 1
        FROM UPDATES innerUpd
       WHERE innerUpd.RecordId = outerUpd.RecordId
    GROUP BY RecordId
           , date_part('year', innerUpd.datecolumn)
           , date_part('month', innerUpd.datecolumn)
      HAVING max(innerUpd.datecolumn) = outerUpd.datecolumn
 )

(适用于PostgreSQL,date_part在其他RDBMS中不同)