2010-09-27 52 views
0

我有一個MySQL表,如下所示:如何編寫一個確保兩列獨立唯一的SQL查詢?

user_id resource_id last_used 
-------------------------------- 
     1   1 2010-09-01 
     1   2 2010-09-02 
     1   3 2010-09-04 
     2   3 2010-09-08 
     2   2 2010-09-03 
     3   1 2010-09-01 
     3   1 2010-09-05 

我需要編寫一個查詢,告訴我哪些資源上次使用由用戶,每個用戶和每個資源的唯一上市的最多一次(如果某些用戶和某些資源未列出,則可以)。在上述情況下,我想下面的結果集:

user_id resource_id last_used 
-------------------------------- 
     2   3 2010-09-08 
     3   1 2010-09-05 

注意,每個用戶ID在出現最多一次,每個資源ID最多出現一次,優選最近last_used日期。我的目的沒關係,用戶1和資源2根本沒有出現(雖然如果1 2 2010-09-02出現在結果中也可以)。該查詢需要在潛在的大型數據庫(500,000多行)上運行。是否有一個簡單,合理的快速查詢在SQL中執行此操作?

回答

0

嘗試像這樣開始

SELECT 
    t.user_id, t.resource_id, t.last_used 
FROM 
    tableName AS t 
CROSS JOIN (
    SELECT resource_id, MAX(last_used) AS last_used FROM tableName GROUP BY resource_id 
) AS sq 
USING (resource_id, last_used) 

你可能需要在(resource_id, last_used)列一個綜合指數,使其速度更快。

1

使用:

SELECT x.* 
    FROM YOUR_TABLE x 
    JOIN (SELECT t.resource_id, 
       MAX(t.last_used) AS max_last 
      FROM YOUR_TABLE t 
     GROUP BY t.resource_id) y ON y.resource_id = x.resource_id 
           AND y.max_last = x.last_used 
相關問題