[英]mySQL select rows from a single table for each user_id which are close in timestamp
不确定如何最好地表达这个词,所以请忍受我。 我的表(简体)如下:
id
- 整数 - 自动增量 user_id
- 整数 timestamp
- 日期时间 我需要的功能是查询此表并选择每个user_id
的timestamp
列在预定义时间范围内的所有记录(可能是任意的,但可以说10分钟)。因此,例如,我想知道是否存在是假设的user_id
5的条目,位于“ 2011-01-29 03:00:00”,然后是“ 2011-01-29 03:02:00”,但如果用户在“ 2011-01-29”搜索一次,则不是03:00:00”,然后下一个“ 2011-01-29 05:00:00”。 这还需要捕获实例,其中用户搜索两次以上,每次都在上一次的时间范围内。
对于背景,这是一个站点搜索表,我想知道用户搜索某事然后再次搜索的所有实例(大概是因为他们以前的搜索没有提供他们想要的结果)。
我知道这可能比我想像的要简单,但是我似乎无法弄清楚。 如果需要,我可以澄清或提供其他信息。 谢谢!
编辑:我感兴趣的是搜索表中所有用户的返回结果,不仅仅是用户#5,还有搜索而没有输入实际时间。 时间戳记不应是手动输入的,而应由每个用户查找彼此相距10分钟以内的行。
这应该为您提供所有用户及其在时限内的搜索次数:
SELECT user_id, COUNT(*) AS cnt FROM table
WHERE timestamp BETWEEN "2011-01-29 03:00:00" AND "2011-01-29 03:02:00"
GROUP BY user_id
ORDER BY user_id
这将显示仅由user_id #5
进行的搜索次数:
SELECT COUNT(*) AS cnt FROM table
WHERE user_id=5
AND timestamp BETWEEN "2011-01-29 03:00:00" AND "2011-01-29 03:02:00"
根据实际DB,语法可能会有所不同,尤其是传递给BETWEEN
条件的日期格式。
SELECT distinct t1.user_id, t1.another_field, t1.another_field
FROM
table t1,
table t2
WHERE
t1.user_id = t2.user_id
AND abs(timestampdiff(MINUTE, t1.timestamp, t2.timestamp)) < 10
如果您想进一步限制结果,可以添加
AND t1.user_id = any_number (or IN or between, etc)
要限制日期范围添加,
AND t1.timestamp BETWEEN A and B (or > or <)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.