2012-03-09 62 views
2

我有以下MySQL的表結構,並用它作爲一種記錄表(entries_log)的:如何查詢mysql表中的更改?

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  | 2| 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網站,這對我幫助很大,但我仍然無法找到正確的查詢。

我感謝您的幫助,謝謝!

+0

它可以使用[變量](http://dev.mysql.com/doc/refman/5.0/en/user-variables.html)完成。坦率地說,除非你發佈了鉅額獎金,否則我不會告訴你代碼,因爲這只是太多的工作。 – Bohemian 2012-03-09 12:41:08

+0

謝謝你的回答,波希米亞人。但我不能爲這個問題花錢;) – user1259201 2012-03-09 12:49:28

+0

他可能並不是指金錢,而是業力賞金。但你沒有足夠的業力來發布這樣的獎勵呢。無論如何,多好的學習機會! :-D – 2012-03-09 13:39:00

回答

0

正如波希米亞所說,這是可能的變量。 Explain Extended對如何在MySQL中實現超前/滯後有一個很好的寫法。您需要添加一些額外的邏輯來處理您的確切需求,但它應該指向正確的方向。