2013-03-18 111 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

相关问题