2016-07-28 40 views
1

我正在使用SQL Server 2008,我在想如何從表中刪除重複的客戶,或者在我的查詢中排除它。一個Account_ID只能有1個與之相關的產品。最近購買日期的帳戶是應顯示的內容。下面是一個例子:如何刪除SQL中的重複帳戶?

Account_ID, Account_Purchase, Purchase_Date 
    1   Product 1   1/1/2016 
    2   Product 1   1/2/2016 
    3   Product 2   1/5/2016 
    1   Product 3   3/12/2016 
    4   Product 3   1/5/2016 

理想的情況下,我只會看到:

Account_ID, Account_Purchase, Purchase_Date 
    2   Product 1   1/2/2016 
    3   Product 2   1/5/2016 
    1   Product 3   3/12/2016 
    4   Product 3   1/5/2016 

這不應該出現,因爲它是不是最近從帳戶購買1

Account_ID, Account_Purchase, Purchase_Date 
    1   Product 1   1/1/2016 

謝謝所有人的幫助,鄉親們!

+0

嘗試分組通過ACCOUNT_ID,排序(降序)按日期,並且通過組限制一個記錄。 – FDavidov

回答

0

使用最大和GROUP BY account_id只需獲得最新purchase_date。然後使用inner join從獲取的細節中獲取其他細節。

SELECT TABLE_NAME.* FROM TABLE_NAME 
INNER JOIN(
SELECT Account_ID, MAX(Purchase_Date) AS Purchase_Date 
GROUP BY Account_ID 
) LatestPurchases 
ON TABLE_NAME.Account_ID = LatestPurchases.Account_ID 
AND TABLE_NAME.Purchase_Date = LatestPurchases.Purchase_Date 
0

嘗試下面的查詢,請與您的替換表TABLENAME

 
WITH CTE 
AS (
    SELECT 
    *, 
    ROW_NUMBER() OVER (PARTITION BY Account_ID ORDER BY Purchase_Date DESC) AS RN 
FROM TABLENAME 
    ) 
SELECT 
    * 
FROM CTE 
WHERE RN = 1 

0

下面是另一個查詢

SELECT 
    t.Account_id, 
    t.Account_Purchase, 
    t.Purchase_Date 
FROM 
    tablename t 
WHERE 
    t.Purchase_Date = (SELECT MAX(Purchase_date) FROM Tablename WHERE Account_ID = t.Account_ID) 
ORDER BY 
    t.Purchase_Date DESC