Sql 删除重复项(1到多个)或编写解决问题的子查询
参考下图,记录表具有唯一的记录。每个记录都会通过更新表中的注释进行更新。当我加入这两个团队时,我会得到很多重复的 如何删除重复项?Group By不适用于我,因为我在select查询中有10多个字段,其中一些是函数 编写一个子查询,为在特定月份更新的每条记录提取更新表中的最后更新。加入这个子查询将解决我的问题 谢谢 编辑 感兴趣的表结构是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
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'的最后执行此操作,则会得到错误。谢谢