MySQL中垂直过滤的一般模式

时间:2017-10-11 10:23:53

标签: mysql join self-join

我有MySQL表保存对象的历史记录(对象的每个状态在不同的行)并且想要找到那些字段(列)直接从一个值更改为另一个值的对象,因此条件触及2行。

getRef()

为了简化,我们说它将是从11到22的变化,紧接着之后,所以应该过滤掉第一行和最后一行。 (实际情况是4列)

除了以编程方式循环之外,还有什么方法吗? (意味着任何会限制数据库命中的内容和仅针对此类问题的mysql层的一般方法)

1 个答案:

答案 0 :(得分:0)

实际上我认为这是一个很好的问题,因为我要求采用一般方法,但是由于MySQL中的聚合限制(例如,在分组时不保留每个列的顺序;或者相互依赖的条件)几乎不可能在一个查询中进行。

我的方法,工作是使用临时表:

  1. 准备具有最远行的条件的第一部分的查询(作为临时表) 在记录表中(在上面的示例中,它是一个记录,其中有22个来自数据中心/上表)
  2. 用第二部分准备查询(作为临时表)     条件在记录表中的第一个临时表行(索引,值)之前具有最近的行(从11返回11)     数据中心)。请注意:此表在创建时使用第一个临时表。
  3. 上面收集了额外的所需列,我们可以比较2个游标(临时表中2个准备好的输出)
  4. 它将限制所有3个查询,因此很容易在更大的表上运行它。