【发布时间】:2013-09-25 18:19:48
【问题描述】:
这是我的数据结构:
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;
【问题讨论】:
-
数据变化的时候只插入表格会不会更方便?
-
这是来自外部系统的提要,有人决定将其转储到表中。但你是对的,那样会更好。
-
这可能会帮助您从 tbl A INNER JOIN tbl B ON A.Value = B.Value AND A.[date_received] B.date_received