我在數據庫中存儲了單個網站訪問的會話ID,IP地址和時間戳以及所有關聯的綜合瀏覽量。它包含更多的數據,但與此相關的數據與此查詢提取:GROUP BY DAY(FROM_UNIXTIME)意外更改計數
SELECT
Pageviews.id, Visitors.time, Visitors.session, Visitors.ip
FROM Visitors
INNER JOIN Pageviews
ON Visitors.session=Pageviews.session
ORDER BY Visitors.time ASC
導致這樣的事情:
id time session ip
1048 1371473496 nhie5sh2tiufs2ufupcremc6c2 x88.xxx.xxx.xxx
1050 1371474103 8hfphqvq5ri6muc84oidp7q195 x6x.xxx.xxx.xxx
1062 1371474956 hhgssr4v26pjbilkg8d81olqj7 xxx.x3x.xxx.xxx
1066 1371476339 ic8iqd0a4mpoelni15n4tq3404 x1x.xxx.xxx.xxx
1067 1371476629 ockivrm61upk7ss5ni4n8muv23 x2x.xxx.xxx.xxx
1070 1371477856 5tdj9rrd1qsvafovufnkgh8r26 xxx.xxx.x7x.xxx
1068 1371477856 5tdj9rrd1qsvafovufnkgh8r26 xxx.xxx.xxx.x2x
1069 1371478229 5e82v29nuf2k46ir13i21msps5 xxx.x5x.xxx.x8x
讓遊客總數(不同IP地址),訪問(不同的會話)和瀏覽量(瀏覽量不同的ID),我查詢數據庫,如下所示:
SELECT
count(distinct(Visitors.ip)) as 'Visitors',
count(distinct(Visitors.session)) as 'Visits',
count(Pageviews.id) as 'Pageviews'
FROM Visitors
INNER JOIN Pageviews
ON Visitors.session=Pageviews.session
它返回類似下面:
Visitors Visits Pageviews
211 244 412
但是,我想使用存儲的時間戳按年,月和日對這些總數進行分組。爲了獲得這些數據,我寫了下面的查詢:
SELECT
DAY(FROM_UNIXTIME(Visitors.time)) as 'Day',
MONTH(FROM_UNIXTIME(Visitors.time)) as 'Month',
YEAR(FROM_UNIXTIME(Visitors.time)) as 'Year',
count(distinct(Visitors.ip)) as 'Visitors',
count(distinct(Visitors.session)) as 'Visits',
count(Pageviews.id) as 'Pageviews'
FROM Visitors
INNER JOIN Pageviews
ON Visitors.session=Pageviews.session
GROUP BY Year, Month, Day
ORDER BY Year, Month, Day DESC
這工作得相當好,在該日期,瀏覽量和訪問是正確的:
Day Month Year Visitors Visits Pageviews
20 6 2013 40 43 59
19 6 2013 80 90 112
18 6 2013 62 66 173
17 6 2013 43 45 68
正如你所看到的,瀏覽量在此處添加到412以上,以及訪問上述244.然而,晚上讓我感到不安的是,遊客數量不應該累加到211,因爲它應該,但是到225.我不明白爲什麼這隻發生在遊客數量上。
對不起,冗長的問題。任何想法將不勝感激。
只是一個側面說明:'distinct'是**不是**的功能。寫'distinct(foo)'與'distinct foo'相同。這些神經質完全沒有用處,並且經常暗示(特別是當與多列一起使用時)「distinct」的行爲被誤解了。 –
很高興知道,謝謝。 – redburn