直接上sql陳述句
select * from (select *,count(user_id) as ct,from_unixtime(last_update, '%Y-%m-%d %H:%i:%S') from say_bigdata where user_id !=14807 and user_id !=0 and
DATE_SUB(CURDATE(), INTERVAL 3 MONTH) <= from_unixtime(last_update, '%Y-%m-%d') and
CONCAT(type,CONCAT('_',target_id)) in (select CONCAT(type,CONCAT('_',target_id)) from say_bigdata where user_id=14807 and
DATE_SUB(CURDATE(), INTERVAL 3 MONTH) <= from_unixtime(last_update, '%Y-%m-%d')) GROUP BY user_id limit 5) s ORDER BY ct desc;
我實在是沒有什么高深的sql陳述句的經驗,求大神詳細決議一下這段陳述句到底是怎么個意思。如果可以的話,我想再統計這里去用戶3個月內的100條資料應該怎么改。
也是接的活,現在的邏輯如下:
首先獲取單天或者180天內有瀏覽記錄的用戶 (獲得user_id)
然后用查找這些用戶的瀏覽記錄,取前一個月的 (獲得瀏覽記錄串列)
然后分析這些瀏覽記錄中的瀏覽用戶 (再次獲得user_id)
最后最疊加 。。。
例如user_id 1 訪問了 page 1 、 2 、3 、4 、5 、6 、7
例如user_id 2 訪問了 page 1 、 2 、3 、4 、5
例如user_id 3 訪問了 page 1 、 2 、3
然后疊加
1跟2匹配了5次
1跟3匹配了3次
2跟3匹配了3次
最后是我取這些資料的3個月內的前100條資料
希望大神能給予指點!!!
拜謝!!!!
uj5u.com熱心網友回復:
在線等,挺急的~~~~uj5u.com熱心網友回復:
不懂要干啥~~~uj5u.com熱心網友回復:
SELECT *FROM (
# 查詢出訪問和user_id=14807相同target_id的非14807的用戶,只查詢出前五個
SELECT
*,
count(user_id) AS ct,
from_unixtime(last_update, '%Y-%m-%d %H:%i:%S')
FROM say_bigdata
WHERE user_id != 14807 AND user_id != 0 AND
DATE_SUB(CURDATE(), INTERVAL 3 MONTH) <= from_unixtime(last_update, '%Y-%m-%d')
AND CONCAT(type, CONCAT('_', target_id)) IN
(
# 這個是指查出user_id為14807這三個月的訪問了那些target_id
SELECT CONCAT(type, CONCAT('_', target_id))
FROM say_bigdata
WHERE user_id = 14807 AND
DATE_SUB(CURDATE(), INTERVAL 3 MONTH) <=
from_unixtime(last_update, '%Y-%m-%d')
)
GROUP BY user_id
LIMIT 5
) s
ORDER BY ct DESC; #按訪問疊加次數倒序排序。
最后是我取這些資料的3個月內的前100條資料 的話,把5改成100就好了。(因為沒資料,不能保證百分百正確,而且,mysql寫的我感覺也有點問題)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/45072.html
標籤:MySQL
上一篇:InnoDB: The innodb_system data file 'ibdata1' is not a regular InnoDB data file
