2013-04-21 28 views
-1

我選擇一個類似下面的表格,當某個數據值大於x時過濾,將其稱爲事件。現在,我想在事件發生之前抓取最近三次數據,即唯一(id1,id2)對在我的數據庫中。mysql在發生事件後如何從最近三個時間段獲取相關數據

example table 1 (after filtering for data>x) 
id1  id2 time data 
    76 1234 t101 d1 
    46 9573 t102 d2 
    24 3632 t103 d3 
    88 4792 t104 d4 
    17 7799 t105 d5 
    74 2274 t106 d6 

    example output table 
    id1  id2 time data 
    76 1234 t101 d1* 
    76 1234 t76 d2 
    76 1234 t44 d3 
    76 1234 t32 d4 
    46 9573 t102 d5 * 
    46 9573 t99 d6 
    46 9573 t98 d7 
    46 9573 t91 d8 

到目前爲止,我認爲ID1 * ID2生成一個新的唯一ID:要在其上加入id1_id2。爲了得到類似於「示例輸出表」的內容,但是獲得了id1_id2的所有數據,而不僅僅是事件之前的三個數據條目。

+1

請澄清:「當一個值大於x」,您使用的是比較哪個領域?時間??第二,選擇什麼標準(76,1234)和(46,9573)。第三,(t76,d2)等是從哪裏來的?他們不在table1中。第四,「id1_id2的所有數據」是什麼意思? – koriander 2013-04-21 10:47:05

+0

1. data> x,2.我們選擇(id1,id2),因爲它們是發生事件的id對。3.所有數據來自數據庫,表1僅針對數據> x進行過濾。 4. id1_id2在整個數據庫中出現很多次,我只對它們在事件發生之前一起發生的3次數據感興趣。謝謝。 – 2013-04-21 10:57:43

+0

恐怕你對問題的最後一句話仍然沒有意義。它說你想要所有的數據,但你的評論說你只需要最後的(?)三個數據。最後是關於現場時間,我想?我會建議審查你原來的問題,以提高清晰度。 – koriander 2013-04-21 16:35:26

回答

0

這可能是你想要的,這取決於澄清:

SELECT numbered.* 
FROM SELECT filtered.*, 
      IF (id12 = @prev, 
       @n := @n + 1, 
       @n := 1 AND @prev := id12) as position 
    FROM 
      (SELECT  mytable.*, concat_ws('_', id1, id2) as id12 
      FROM  (SELECT id1, id2, time FROM mytable WHERE data > x) AS mytablex 
      INNER JOIN mytable 
      ON   mytable.id1 = mytablex.id1 AND mytable.id2 = mytablex.id2 
      ORDER BY id1, id2, time DESC) 
      AS   filtered 
    JOIN (SELECT @n := 0, @prev := '') AS setup) 
    AS numbered 
WHERE numbered.position < 4 
相關問題