Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 删除重复项(1到多个)或编写解决问题的子查询_Sql_Sql Server 2005_Subquery_Duplicate Removal - Fatal编程技术网

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

Sql 删除重复项(1到多个)或编写解决问题的子查询,sql,sql-server-2005,subquery,duplicate-removal,Sql,Sql Server 2005,Subquery,Duplicate Removal,参考下图,记录表具有唯一的记录。每个记录都会通过更新表中的注释进行更新。当我加入这两个团队时,我会得到很多重复的 如何删除重复项?Group By不适用于我,因为我在select查询中有10多个字段,其中一些是函数 编写一个子查询,为在特定月份更新的每条记录提取更新表中的最后更新。加入这个子查询将解决我的问题 谢谢 编辑 感兴趣的表结构是 create table Records( recordID int, 90more_fields various ) create table Updat

参考下图,记录表具有唯一的记录。每个记录都会通过更新表中的注释进行更新。当我加入这两个团队时,我会得到很多重复的

如何删除重复项?Group By不适用于我,因为我在select查询中有10多个字段,其中一些是函数

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

谢谢

编辑 感兴趣的表结构是

create table Records(
recordID int,
90more_fields various
)

create table Updates(
update_id int,
record_id int,
comment text,
byUser varchar(25),
datecreate datetime
)
这里有一条路

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 

根据现有的有限信息

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

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

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,日期部分与其他RDBMS不同

您使用的RDBMS是什么?你能给我们提供更多有关表模式的详细信息吗?我们需要知道一些愚蠢的东西,比如表结构和关系来编写查询…MS-SQL 2005,WinXP。Orange=RecordID主键,Blue=Record_ID2这与Orange的RecordID相同,这是变量上的连接。没有关系,假设他们是独立的,否则也可以试试乔的。一切看起来都很好。我需要把WHERE子句放在橙色的表中,在这个查询中我应该把它放在哪里?如果我在o.customerName='test'的最后执行此操作,则会得到错误。谢谢