0

我有一张包含keys,bucketstime

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

我想获得一个列表,其中的键 >= time并且在 timex之间不重复。在上面的表格中,所有键都有一个时间 >=但最后一个键已被触摸,并将从列表中删除,导致类似这样的结果yxx1 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;

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

编辑:

键是一个字符串

桶是一个字符串

time 是一个时间对象,例如 "15/May/2013:18:35:03 +0000"

4

2 回答 2

1

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

要做到这一点:

SELECT `Key`, `Bucket`, MAX(`Time`) FROM `log` GROUP BY `Key`, `Bucket`;
于 2013-05-16T00:14:08.710 回答
1

假设我现在正确理解了您,这就是您的答案。这将返回给定时间范围内只有一个匹配项的日志结果。

因此,如果找到两个匹配项,它会消除它们,对吗?

SELECT `keyname`, `bucket`, MAX(`time`)
FROM `log` 
WHERE `time` > 'x'
GROUP BY `keyname`, `bucket`
HAVING COUNT(*) = 1
于 2013-05-16T00:20:49.803 回答