如何查询mysql表中的更改?

时间:2012-03-09 12:13:50

标签: mysql

我有以下mysql-table结构并将其用作一种日志表(entries_log):

    customer_id  | parent_id     | child_id  | quarter | month
    xyz          |     21        |  3        |  20121  | 201201
    xyz          |     21        |  5        |  20121  | 201201
    xyz          |     21        |  5        |  20122  | 201204
    xyz          |     21        |  6        |  20122  | 201204    
    xyz          |     21        |  4        |  20123  | 201207 
    ...          |     ...       |  ....     |   ....  |   ...

我希望你能理解这张桌子。现在我想跟踪每个customer_id的child_id是否存在与上一季度相关的每个季度的任何上行变化(四分之一行可能存在差距,因此以下示例是可能的,并且必须被视为:20121年...... 20122年...... 20124年。

所以在上面的例子中我只想得到以下输出:

     xyz          |     21        |  5        |  20121  | 201201
     xyz          |     21        |  6        |  20122  | 201204

我解决了这个问题:

SELECT e.customer_id, e.parent_id, e.child_id, e.month, e.quarter
 FROM (
    SELECT MAX(month) AS maxmonth, quarter, max(child_id) 
     FROM entries_log AS e 
     WHERE EXISTS ( 
        SELECT * 
         FROM entries_log AS f 
         WHERE (
            SELECT COUNT(*) FROM entries_log AS g 
             WHERE g.quarter = f.quarter 
             AND g.month = f.month
         ) <= 2 
         AND e.quarter > quarter 
         AND e.child_id> child_id
     )
     GROUP BY quarter
 ) AS x 
 INNER JOIN entries_log AS e ON e.quarter = x.quarter AND e.month = x.maxmonth;

我阅读了this网站,这对我帮助很大,但我仍然无法找到正确的查询。

感谢您的帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

正如波希米亚人所说,这可以通过变量实现。 Explain Extended很好地描述了如何在MySQL中实现前导/滞后。您需要添加一些额外的逻辑来处理您的确切要求,但它应该指向正确的方向。