2013-03-18 113 views
0

我正在使用以下查詢來查找每天來自我的某個表的唯一身份訪問者數量。但是這會影響性能。任何人都可以爲此提出更好的解決方案。我當前的查詢是:找到唯一身份訪問者的更好解決方案

SELECT t.date,COUNT(DISTINCT t.uID) as unique_clicks FROM table_name t 
WHERE 
    NOT EXISTS(
     SELECT 1 
     FROM table_name t2 
     WHERE 
      t2.uID = t.uID 
      AND t2.date < (t.date) 
    ) 
GROUP BY t.date 
+0

你的表結構是什麼? – MarcinJuraszek 2013-03-18 06:51:55

+0

設置[小提琴](http://www.sqlfiddle.com)? – hd1 2013-03-18 06:52:06

+0

爲什麼你需要'NOT EXISTS'謂詞?爲什麼不用'group by'來計數:'SELECT t.date,COUNT(DISTINCT t.uID)as unique_clicks FROM table_name t GROUP BY t.date'? – 2013-03-18 06:52:22

回答

0

你可以試試這個:

SELECT 
    t.date, COUNT(DISTINCT t.uID) as unique_clicks 
FROM 
    table_name t LEFT JOIN table_name t1 
    ON t.uID=t2.uID AND t2.date < t.date 
WHERE 
    t2.uID is NULL 
GROUP BY t.date 

我認爲一個連接應該是快於一個在這個特定的情況存在條款。或者,如果我理解正確的邏輯,也這樣:

SELECT min_date, COUNT(*) as unique_clicks 
FROM (
    SELECT 
    t.uID, min(t.date) min_date 
    FROM 
    table_name t 
    GROUP BY 
    t.uID 
) s 
GROUP BY min_date 

請參閱小提琴here

相關問題