2010-05-04 43 views
1

我有一個表,看起來像這樣:遞歸SQL,最近三個值增加了嗎?

---------------------- 
| DateTime | Value | 
---------------------- 
| 2010-01-01 | 26 | 
| 2010-02-01 | 24 |  
| 2010-03-01 | 23 | 
| 2010-04-01 | 28 | 
| 2010-05-01 | 30 | 

我需要找到如果最近連續3個月的價值也隨之增加。

我怎樣才能讓SQL檢查每個值是否增加? 如果任何人都可以給我任何解決這個問題的指針,將不勝感激!

感謝

+0

任何理由你想在SQL中做到這一點?從你的應用程序做起來要簡單得多。 – outis 2010-05-04 07:00:01

+0

我認爲這會在SQL中更容易嗎? 我不確定它如何在應用程序中工作。 – Mike 2010-05-04 21:42:59

+0

在您的應用程序中,只需獲取您想要的數據,按'DateTime'排序。循環結果,檢查連續值是否增加。這與檢查(例如)[23,28,30]是否增加是一樣的。 – outis 2010-05-05 01:21:46

回答

2

隨着@n站在一個小於要檢查連續值(2,在您的案件)數量:

SELECT MIN(increase) AS increasing 
    FROM (SELECT t1.`Value` > t2.`Value` AS increase 
      FROM tbl AS t1 
      JOIN tbl AS t2 
       ON t1.`DateTime` = t2.`DateTime` + INTERVAL 1 month 
      WHERE t1.DateTime < '2010-06-01' 
      ORDER BY t1.`DateTime` DESC 
      LIMIT @n) AS tmp; 

或:

SELECT MIN(t1.`Value` > t2.`Value`) AS increasing 
    FROM tbl AS t1 
    JOIN tbl AS t2 
     ON t1.`DateTime` = t2.`DateTime` + INTERVAL 1 month 
    WHERE t1.`DateTime` > NOW() - INTERVAL 3 month; 
+0

謝謝,這篇文章是黃金。 – Mike 2010-05-05 01:13:24