鍍金池/ 問答/數(shù)據(jù)庫/ mysql,一個(gè)日志表,如何統(tǒng)計(jì)出只有一天記錄的用戶?

mysql,一個(gè)日志表,如何統(tǒng)計(jì)出只有一天記錄的用戶?

????有這樣一個(gè)日志表,存著用戶點(diǎn)擊的記錄,一天可能有多條記錄;現(xiàn)在想統(tǒng)計(jì)出,只有一天點(diǎn)擊記錄的用戶,有兩天的點(diǎn)擊記錄的用戶,有三天的點(diǎn)擊記錄的用戶,以此類推4天,5天....這個(gè)sql應(yīng)該如何寫?
????表相關(guān)字段:

id(PK,AI) user_id click_time(點(diǎn)擊時(shí)間:Y-m-d H:i:s)
回答
編輯回答
離魂曲

先說結(jié)果。
SELECT TO_DAYS(MAX(time))-TO_DAYS(MIN(time)),USER FROM test GROUP BY USER
執(zhí)行后,結(jié)果如下:
0 王
1 李
2 張
根據(jù)用戶分組查詢,然后計(jì)算該用戶的最大時(shí)間和最小時(shí)間之差。比如0和王這條記錄,表示王這個(gè)用戶所有記錄都在同一天。

---------------------------分割線-----------------------------
經(jīng)過@邢愛明同學(xué)的提示,才發(fā)現(xiàn)自己第一時(shí)間想錯(cuò)了。
重新思考以后,只需要寫一句代碼即可。
自己測(cè)試新建了一張表test,表結(jié)構(gòu)如下
圖片描述

SELECT NAME,COUNT(DISTINCT(DATE(click_time))) FROM test GROUP BY NAME

執(zhí)行完sql以后如下:
圖片描述

2018年5月13日 18:59
編輯回答
清夢(mèng)

只有一天的比較好寫。
用用戶的最大點(diǎn)擊時(shí)間 - 用戶最小的點(diǎn)擊時(shí)間。如果沒超過一天。就是只有一天的。
其他情況
取到最小時(shí)間,按天數(shù)往上加,如果超過了最大時(shí)間。計(jì)算循環(huán)次數(shù)

2017年11月28日 13:50
編輯回答
扯機(jī)薄

來,邏輯,先將點(diǎn)擊時(shí)間設(shè)置在某個(gè)范圍然后去重 user_id (distinct),或者分組 group by。這是第一步,然后使用 count 函數(shù)進(jìn)行統(tǒng)計(jì),總共有多少條,也就是有多少天,然后再依據(jù)這個(gè)結(jié)果進(jìn)行分組。也就出現(xiàn)了,一天,兩天,三天的排列。希望具體語句如果不會(huì)你要先去學(xué)習(xí)一下。具體寫的我寫在下面給你。

select a.datenum,group_concat(a.user_id,',') from (select count(*) as datenum,user_id from table group by to_days(click_time),user_id ) as a group by a.datenum; 

ps: 啊,因?yàn)闆]有具體數(shù)據(jù)測(cè)試,具體能不能使用,你還是要測(cè)試一下(如果你要用我寫的話)。邏輯大概如此。

2017年3月17日 18:08
編輯回答
吢涼

問題描述的比較模糊,@陳二先生 已經(jīng)給出大概的思路了,@liuxy 看一下是不是你要的結(jié)果。

2017年7月15日 10:21