我希望得到一個數字,在過去一週內至少登錄一次的用戶,但我希望它能夠獨立地計算每一天的用戶,所以按星期編號分組將不起作用。號碼,在過去7天登錄至少一次,一天
我crm_login_info
表結構看起來像這樣:
user_id (INT) | login_time (DATETIME)
1 | 2017-08-10 14:32:25
2 | 2017-08-11 14:32:25
3 | 2017-08-11 14:32:25
2 | 2017-08-13 14:32:25
3 | 2017-08-14 14:32:25
4 | 2017-08-15 14:32:25
5 | 2017-08-15 14:32:25
2 | 2017-08-18 14:32:25
1 | 2017-08-19 14:32:25
3 | 2017-08-20 14:32:25
5 | 2017-08-20 14:32:25
2 | 2017-08-21 14:32:25
3 | 2017-08-22 14:32:25
我有2個索引 - 一個是對user_id
和login_time
和第二隻login_time
。
我試圖做到的,是功能,這對於上述一組數據將輸出的東西沿着這些路線:
2017-08-10 | 1
2017-08-11 | 3
2017-08-12 | 3
2017-08-13 | 3
2017-08-14 | 3
2017-08-15 | 5
2017-08-16 | 5
2017-08-17 | 4
2017-08-18 | 4
2017-08-19 | 5
2017-08-20 | 5
2017-08-21 | 5
2017-08-22 | 4
我已經有一個應該查詢走到工作:
SELECT DISTINCT(DATE_FORMAT(`login_time`,'%Y-%m-%d')) AS date1, (
SELECT COUNT(DISTINCT `user_id`)
FROM crm_login_info
WHERE `login_time` > DATE_SUB(date1, INTERVAL 6 DAY) AND `login_time` <=
DATE_ADD(date1, INTERVAL 1 DAY)) AS distinct1
FROM crm_login_info
ORDER BY date1 ASC
但首先,它給我的警告有關在較低的查詢中使用date1
,二是當我這整個查詢之前運行EXPLAIN
它告訴我,子查詢distinct1
不使用任何指標,恐怕它將會運行很長時間,因爲它是非常大的表格(大約7米行),並且公平地說,即使使用WHERE login_time > '2017-08-28'
關閉數據,我也無法完成該查詢。
雖然我知道我可以只把它分解了數百查詢(每天一個),並保存在某個地方,因爲過去的數據不會改變,我在尋找一些更有活力的解決方案,因爲我不想讓通過在db中添加另一個文件/表格來進一步增加我的系統的複雜性,僅用於單個統計。
我已經在網上尋找解決方案,但找不到任何對我有幫助的事情。感謝您提供的任何幫助,如果您需要進一步澄清,請隨時通過評論提問。
編輯:我希望過去幾天,至少過去一年中每天都會生成這些數據。此外,爲了進一步澄清,我想不同用戶記錄在過去7天,沒有量限制登錄的次數,我希望它產生它過去的日子裏爲好,例如日期2017-08-22
它會從計算出不同user_id
小號範圍2017-08-16
到2017-08-22
包括這些日期。
請說明一下:過去一週還是過去一年? – Pharaoh
用戶在過去7天內,每天至少從一年前生成的天數 –
說實話,對我來說,這看起來不像mysql(或其他查詢語言)的工作。我只是在@Pharaoh答案中得到查詢結果,然後只是從這個查詢的結果中計算出期望的結果 - 它在任何編程語言中都只是一個簡單的循環。 – Drecker