2017-10-11 76 views
-1

垂直濾波一般模式我有MySQL表保存對象的歷史記錄(對象的任何國家都是不同的行中),並希望找到有對象,其字段(列)已經直接改變從一個值到另一個,所以條件觸摸2行。在MySQL的

row1_col1, row1_col2, ..., 22, ..., '2017-08-08 20:11:06.501658' 
... 
... -- some rows with different values than 11 and 22 
... 
row21_col1, row21_col2, ..., 11, ..., '2017-08-28 18:13:16.490628' 
row22_col1, row22_col2, ..., 22, ..., '2017-08-28 20:11:06.501658' 
... 
... -- some rows with different values than 11 and 22 
... 
row101_col1, row101_col2, ..., 11, ..., '2017-11-28 18:13:16.490628' 

爲了簡化讓我們說這將是從11到22的變化,之後緊接着,所以第一和最後一行應該被過濾掉。 (實際情況是4列)

是任何方法在這裏超越編程循環? (這意味着任何限制命中數據庫和一般的方法就只是對於這個問題的MySQL層)

+0

請張貼expexted輸出一些測試輸入,也許你的一些嘗試,以及 –

+0

你能否使這個問題的任何更不透明?請參閱:[我爲什麼要提供什麼,在我看來是一個非常簡單的SQL查詢的MCVE?](https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-換什麼,似乎對我將要-A-極簡單的SQL查詢) – Strawberry

回答

0

其實我認爲這是一個很好的問題,因爲我要求的是一般的方法,但由於MySQL(像分組時不保證和不保證每一列;或相互依賴的條件)幾乎不可能在一個查詢中進行。

我的方法,其工作是使用臨時表:

  1. 準備查詢(如臨時表),用在記錄表具有條件最遠行 第一部分(在上面的例子中它是具有22從​​記錄數據的中心/上表)
  2. 準備查詢(作爲臨時表)與 條件的第二部分具有離記錄表中的第一臨時錶行(距離 中心返回11(索引,值)數據的)。請注意:此表在創建時使用第一個臨時表。
  3. 具有上述與其他所需的列收集我們只可以比較2個光標(在臨時表2個準備輸出)

,它都將限制在3個查詢,所以很容易對大表運行它。