-1

当数据值大于 x 时,我选择如下过滤表,将此称为事件。现在我想获取事件发生前唯一 (id1, id2) 对在我的数据库中的最后 3 次数据。

  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 的所有数据,而不仅仅是事件之前的三个数据条目。

4

1 回答 1

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
于 2013-04-21T17:00:54.497 回答