簡體   English   中英

SQL查詢排除重復項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM