表結構如下:
CREATE TABLE `yd_link_record` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`ip` varchar(120) NOT NULL DEFAULT '' COMMENT '訪問ip地址',
`spare_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '其他備用關聯ID',
`link_from` tinyint(2) NOT NULL DEFAULT '0' COMMENT '訪問終端1:iPhone,2:Android,3:公眾號,4:微信小程式',
`create_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '統計時間',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=utf8 COMMENT='瀏覽記錄表';
此記錄表會對每天的來訪ip做記錄,無論他的ip有沒有重復,都會寫入這個資料庫中。且,會對來訪設備進行備注。
現在要求如下:根據時間來篩選(默認當月1號到月尾)這個時間段內每個訪問終端的uv總數,每天每個ip只被計算一次。
三天時間了,實在想不出來解決方案,請各位幫幫忙……
uj5u.com熱心網友回復:
怎么知道ip在create_time欄位中的資料是不是在那天的24小時出現次數大于1次?比如說我一個ip在4月2號的時候訪問了10次,但因為這10條資料是在那天的24小時以內的,我的ip查出來的時候就只能是一條,這個sql陳述句怎么寫?
uj5u.com熱心網友回復:
好像很簡單啊,也就是把訪問時間只取年月日,不要時分秒,只按日期來分組就是select
ip,date(create_time),link_from,count(0)
from yd_link_record where create_time>'2018-05-01' and create_time<'2018-06-01'
group by ip,date(create_time),link_from
order by date(create_time) desc;
就可以統計到每個ip每天訪問了多少次。查詢出來的結果每個ip每天只有1條的
uj5u.com熱心網友回復:
SELECT link_from,count(distinct ip) as counts,FROM_UNIXTIME(create_time,'%Y-%m-%d') as link_day FROM `yd_link_record` WHERE `create_time` BETWEEN 1527782400 AND 1530374399 GROUP BY link_day,link_from這樣寫,好像解決了這個問題,不知道是不是……結果集如下:
link_from counts link_day
1 2 2018-06-01
2 2 2018-06-01
1 1 2018-06-02
uj5u.com熱心網友回復:
這個好像和我的差不多,謝謝了……
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/88034.html
標籤:MySQL
