2013-05-15 49 views
0

我有一个表的keysbucketstimeMYSQL筛选键超过X天的,不重复小于X天

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但最后的关键已经被感动,将导致这样的事情

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

我想这样做在MySQL和我的列表中删除1 A x很新,SQL文档很混乱。

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

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

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

编辑:

键是一个字符串

桶是一个字符串

时间等的时刻对象 “15 /月/ 2013:18:35:03 0000”

+0

什么样的专栏是时间?实际数据是什么样的? –

+0

@StevenMoseley做编辑帮助? – Jeff

+0

为了澄清,当你说“我想要得到一个列表,其中有> = x时间的键并且不重复

回答

1

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

为了做到这一点:

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

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

因此,如果找到了两个匹配,它就消除了它们两个,对吧?

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