2010-05-04 5 views
1

J'ai une table qui ressemble à ceci:SQL récursif, les trois dernières valeurs ont-elles été augmentées?

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

Je dois trouver si les trois derniers mois consécutifs ont augmenté en valeur.

Comment puis-je demander à SQL de vérifier si la valeur de chacun a augmenté? Si quelqu'un peut me donner des conseils pour résoudre ce problème, il serait grandement apprécié!

Merci

+0

Quel est le motif vous voulez faire cela en SQL? C'est beaucoup plus simple à faire depuis votre application. – outis

+0

Je pensais que cela aurait été plus facile à faire en SQL? Je ne suis pas sûr de savoir comment cela fonctionnerait dans une application non plus. – Mike

+0

Dans votre application, il vous suffit d'obtenir les données que vous souhaitez, classées par 'DateTime'. Boucle sur les résultats, en vérifiant que les valeurs consécutives augmentent. C'est la même chose que de vérifier que [23, 28, 30] 'augmente [par exemple]. – outis

Répondre

2

Avec @n debout pour un de moins que le nombre de valeurs consécutives que vous voulez vérifier (2, dans votre cas):

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; 

ou:

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

Merci, ce billet est en or. – Mike

Questions connexes