[英]SQL Query to exclude duplicates
我在为工作场所编写一些代码以消除查询中出现的重复记录时遇到问题。
当前查询输出:
ID
Name
RelationID
RelationName
RelationDescription
Year
ModifiedDate
ModifiedBy
我遇到的问题是, ModifiedDate(datetime)
列有时在同一天进行了多次修改,因此执行查询时会显示重复的记录。
我尝试使用SELECT DISTINCT, GROUP BY, WHERE
语句过滤年份等ModifiedDate = convert(varchar(10), ModifiedDate, 102)
将ModifyDate和时间分成单独的列(由于某些修改,因此无法过滤)在同一天的同一时间制作),并尝试了不同的方法来尝试过滤RelationID
列,因此该列仅显示一条记录,但没有一条起作用。
我想知道是否有人可以帮助我过滤列RelationID
以仅显示最新修改的内容? 我已经拖延了数天的互联网,但无法正常工作。
查询当前看起来像这样:
我的原始查询:
SELECT DISTINCT
ID, Name, RelationID, RelationName, RelationDescription, Year, ModifiedDate, ModifiedBy
FROM table1, table2
WHERE Year = YEAR(GETDATE()) AND ModifiedDate IS NOT NULL
输出:
123, Dave, 321, Sarah, 2018, 2015-12-01 09:47:36.347
123, Dave, 321, Sarah, 2018, 2015-12-01 09:47:36.347
表1和表2通过RelationID内部连接。 表1上有ModifiedDate和ModifiedBy。
感谢您的耐心配合,如果您需要更多信息,请告诉我。
使用CTE尝试一下
WITH TEMP AS
(
SELECT RELATIONID,MAX(MODIFIEDDATE) MDATE FROM TABLENAME
GROUP BY RELATIONID
)
SELECT A.* FROM TEMP T
INNER JOIN TABLENAME A
ON A.RELATIONID=T.RELATIONID AND A.MODIFIEDDATE=T.MDATE
下面的查询仅显示每个RelationID的最新修改。 OUTER APPLY基本上是一个OUTER JOIN,您可以对其应用其他过滤器,例如在本例中为TOP 1,仅获得最后修改的记录。
SELECT
[ID]
,[Name]
,[RelationID]
,[RelationName]
,[RelationDescription]
,[Year]
,[ModifiedDate]
,[ModifiedBy]
FROM
[table2]
OUTER APPLY (
SELECT
TOP 1
[ModifiedDate]
,[ModifiedBy]
FROM
[table1]
WHERE
[table2].[RelationID] = [table1].[RelationID]
ORDER BY
[ModifiedDate] DESC
) [table1]
You can use CTE and Row Number and filter the data by the highest modified time
See the below query
;with CTE
AS
(SELECT ID, Name, RelationID, RelationName, RelationDescription, [Year], ModifiedDate, ModifiedBy
,ROW_NUMBER() OVER (Partition by RelationID ORDER BY ModifiedDate DESC) RN
FROM Table1
INNER JOIN Table2 ON Table1.RelationID = Table2.RelationID
)
Select * from CTE
where RN = 1
您可以尝试这种构造:
SELECT ID, Name, RelationID, RelationName, RelationDescription, Year, ModifiedDate, ModifiedBy
FROM Table1
INNER JOIN Table2 ON Table1.RelationID = Table2.RelationID
WHERE ModifiedDate = (
SELECT MAX(ModifiedDate) FROM Table1 AS TableX
WHERE Table1.ID = TableX.ID -- and other columns as necessary
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.