2010-12-03 4 views
0

J'ai MySQL DB qui contient la date de l'événement et 3 gammes, à savoir de -1 à 1, de 2 à 2, de 3 à 3
chaque gamme a un prix différent, c'est-à-dire de1 à 1 rate1, de2 à 2 rate2, ...Requête SQL pour trouver une valeur dans plusieurs gammes

donc c'est 3 colonnes pour chaque gamme: de, à et évaluer.

J'essaie de trouver la requête qui renvoie le taux pour un mois donné, ce qui signifie que la plage se trouve dans le mois et renvoie le taux de cette plage.

des idées?
merci!

Répondre

0

Il semble que votre modèle de données ne soit pas normalisé. Vous devriez considérer la suggestion de morjas sur la création d'une table supplémentaire. Ci-dessous une requête vraiment laide qui vérifie si une date est dans l'une des trois plages, puis renvoie le taux de correspondance.

select case 
     when date '2010-12-05' between range1_from and range1_to then range1_rate 
     when date '2010-12-05' between range2_from and range2_to then range2_rate 
     when date '2010-12-05' between range3_from and range3_to then range3_rate 
     end as rate 
    from events 
where date '2010-12-05' between range1_from and range1_to 
    or date '2010-12-05' between range2_from and range2_to 
    or date '2010-12-05' between range3_from and range3_to; 
+0

merci. qu'entendez-vous par "non normalisé"? et que fait le mot-clé "date"? –

+0

Le mot-clé date est un moyen de spécifier un littéral de date. Vous dites à la base de données que cette chaîne doit être traitée comme une date. – Ronnis

2

Si vous créez une table supplémentaire uniquement pour les plages, vous conservez votre schéma sous une forme normale et vous pouvez facilement sélectionner le bon taux: plage TABLE, COLONNES de, à, taux. Avec une clé étrangère liée à votre table d'origine. Ensuite, vous pouvez sélectionner le taux de la gamme WHERE 'date'> = de ET 'date' < = à.

Questions connexes