参考下图,记录表有唯一的记录。通过更新表中的注释更新每条记录。当我加入这两个时,我得到了很多重复。
如何删除重复项? 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
)
答案 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中不同)