这是我的数据结构:
name value date_received
foo 100 2013-09-19 10:00:00
bar 200 2013-09-19 10:00:00
foo 100 2013-09-19 10:05:00 //no change
bar 200 2013-09-19 10:05:00 //no change
foo 110 2013-09-19 10:08:00 // foo changed
bar 200 2013-09-19 10:08:00 // no change
......
问题:
我想要一个可以执行以下操作的查询(mysql):
select date_received where anyOf(foo, bar) changed from the previous
specified value in the past N hours.
表中可能还有其他名称,但我们只对 foo 和 bar 感兴趣。
任何指针。对我来说,看起来我们需要一个自我加入 - 但不知道如何。
编辑:看起来下面的查询只是一个很好的起点。
select date_received from (SELECT DISTINCT name, value from data) a
INNER JOIN (select DISTINCT name, value, date_received from data)b
on (a.name=b.name and a.value=b.value)
更新看起来像下面的查询工作 - 比我想象的要容易。
SELECT DISTINCT a.tr FROM (
SELECT name, value, MAX(date_received) dr from data
where date_received > now() - INTERVAL 2 hour
GROUP BY name, value order by dr desc)a;