這裏有一個問題,那就是我需要計算每個日期的30天內的unque用戶總數。我的意思是今天它是今天範圍內的唯一總和 - 30天,昨天是昨天 - 30天等等。表結構是:30天內的唯一身份用戶總數
date uid visits
27-06-2013 11 40
27-06-2013 14 40
26-06-2013 13 45
25-06-2013 11 20
24-06-2013 12 40
它繼續像這樣。我需要的是每天的總和。
這裏有一個問題,那就是我需要計算每個日期的30天內的unque用戶總數。我的意思是今天它是今天範圍內的唯一總和 - 30天,昨天是昨天 - 30天等等。表結構是:30天內的唯一身份用戶總數
date uid visits
27-06-2013 11 40
27-06-2013 14 40
26-06-2013 13 45
25-06-2013 11 20
24-06-2013 12 40
它繼續像這樣。我需要的是每天的總和。
東西那麼簡單,下面應該很好地工作:
SELECT
`date`,
COUNT(DISTINCT `uid`) as `unique_visits`
FROM
`foo`
WHERE
`date` >= DATE_SUB(NOW(), INTERVAL 30 DAY)
GROUP BY
`date`
假設我已經正確地讀出你的問題,你日期字段的數據類型爲日期,然後這樣的可能: -
SELECT Sub1.EndDate, COUNT(DISTINCT a.uid)
FROM SomeTable a
INNER JOIN
(
SELECT DISTINCT date AS EndDate, DATE_SUB(date, INTERVAL 30 DAY) AS StartDate
FROM SomeTable
) Sub1
ON a.date BETWEEN Sub1.StartDate AND Sub1.EndDate
這是使用一個子選項來獲取30天的每個範圍,然後加入到表中以獲得該表中的所有記錄r ange和做一個不同的計數找到所有不同的用戶
#1054 - '字段列表'中的未知列'Sub1.date' –
現在就試試吧(我把日期字段設置爲EndDate,但忘記在頂部選擇中將其更改) – Kickstart
Consider this example. It provides a rolling sum on values within 3 points of the current value
SELECT * FROM ints;
+---+
| i |
+---+
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
+---+
SELECT x.i, SUM(y.i) FROM ints x JOIN ints y ON y.i BETWEEN x.i-3 AND x.i GROUP BY x.i;
+---+----------+
| i | SUM(y.i) |
+---+----------+
| 0 | 0 |
| 1 | 1 |
| 2 | 3 |
| 3 | 6 |
| 4 | 10 |
| 5 | 14 |
| 6 | 18 |
| 7 | 22 |
| 8 | 26 |
| 9 | 30 |
+---+----------+
爲什麼不使用DATE數據類型的日期?一旦你解決了這個問題,請準備一個sqlfiddle並向我們展示期望的結果集的實際外觀。 – Strawberry
@Barmar檢查尾部求和查詢。但我不明白第一個答案,第二個只是選擇3天。所以在這裏我需要做這個30天? –
是的,對不起,這些答案在這麼長時間內並不是很好。使用Kickstart的答案。 – Barmar