MYSQL过滤密钥超过X天,不会重复少于X天

时间:2013-05-15 23:59:03

标签: mysql

我的表格中包含keysbucketstime

的列表
Key   Bucket   Time
1     A        x
1     B        x
1     C        x
2     A        x
3     A        x
4     A        x
1     A        y

我希望获得一个包含> = x时间密钥的列表,并且不会在yx时间之间重复。在上表中,所有键的时间都为> = x,但最后一个键已被触及,将从列表中删除1 A x,从而产生类似这样的内容

Key Bucket 
1   B
1   C
2   A
3   A
4   A

我正在尝试在MySQL中执行此操作,而且我很新,并且对SQL文档非常困惑。

我尝试过这样的事情......我不知道它在做什么。

SELECT keyname, bucket, log.time FROM log INNER JOIN (SELECT time FROM log GROUP BY keyname) dup ON log.time = dup.time;

希望我已经很好地描述了这个问题。

编辑:

key是一个字符串

bucket是一个字符串

时间是一个时间对象,如“15 / May / 2013:18:35:03 +0000”

2 个答案:

答案 0 :(得分:1)

我的理解是,您希望根据Time字段获取最新记录,同时仅返回Key + Bucket的唯一组合。

要做到这一点:

SELECT `Key`, `Bucket`, MAX(`Time`) FROM `log` GROUP BY `Key`, `Bucket`;

答案 1 :(得分:1)

假设我现在正确告诉你,这是你的答案。这将返回日志结果,其中在给定时间范围内只有一个匹配。

所以,如果找到两个匹配,它会消除它们两个,对吧?

SELECT `keyname`, `bucket`, MAX(`time`)
FROM `log` 
WHERE `time` > 'x'
GROUP BY `keyname`, `bucket`
HAVING COUNT(*) = 1