求sql大神

weixin_40137539 2019-09-21 09:51:44
直接上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条数据
希望大神能给予指点!!!

拜谢!!!!
...全文
220 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
asa-x 2019-10-09
  • 打赏
  • 举报
回复
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写的我感觉也有点问题)。
蜕变之痛 2019-10-04
  • 打赏
  • 举报
回复
不懂要干啥~~~
weixin_40137539 2019-09-21
  • 打赏
  • 举报
回复
在线等,挺急的~~~~

56,675

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧