2010-11-03 6 views
1

J'ai une table SQL avec le schéma suivant:Déterminer les valeurs mensuelles des enregistrements horodatés

fruit_id INT 
price FLOAT 
date  DATETIME 

Ce tableau contient de nombreux enregistrements pour lesquels le prix d'un fruit donné est enregistré à un moment donné. Il peut y avoir plusieurs enregistrements en une seule journée, il peut y avoir

Je voudrais être en mesure d'aller chercher une liste de prix pour un seul fruit au cours des 12 derniers mois inclusivement du mois en cours. Donc, donné un fruit_id de 2 et datetime de now(), quelles seraient les valeurs de prix pour Décembre, Janvier, Février, ... Octobre, Novembre?

Compte tenu des exigences ci-dessus, quelle stratégie utiliseriez-vous pour obtenir ces données? Pure sql, aller chercher tous les prix et traiter en code?

Merci pour votre temps.

Répondre

2

Parlez-vous de prix min, prix max, prix moyen, ou autre chose?

Voici une requête rapide pour vous aider à démarrer, qui comprend min, max, et le prix moyen pour chaque mois pour fruit_id 2:

select left(date,7) as the_month, min(price),max(price),avg(price) 
from fruit_price 
where fruit_id = 2 
and date >= concat(left(date_sub(curdate(), interval 11 month),7),'-01') 
group by the_month; 
+0

OP dit qu'il veut des résultats de fruits simples au cours des 12 derniers mois .. cela donnera des résultats pour tous les mois .. – Vishal

+0

mis à jour, merci. –

0
select month(date) as "Month", distinct(price) as "Unique Price" where fruit_id = 2 group by month(date); 

Je vais essayer de dire autant que possible dans SQL qui ne nécessite pas l'accès aux données non indexées, car il est généralement rapide (er) que le traitement avec l'application.

+0

vous avez besoin d'un groupe par .. – Vishal

+0

Oups, vous avez absolument raison : sélectionnez mois (date) comme "Mois", distinct (prix) comme "Prix unique" où fruit_id = 2 groupe par mois (date); – 0xCAFEBABE

1

Si je comprends bien de -

I would like to be able to fetch a list of prices for a single fruit over the last 12 months inclusive of the current month. So given a fruit_id of 2 and datetime of now(), what would the price values be for December, January, February, ... October, November?

Vous voulez que le prix total pour chaque mois pour une seule année en fonction de la date et fruit_if vous passez

Ainsi, ce won. Ne donnez pas tous les mois d'une année, mais tous les mois qui ont eu un prix pour l'année .. si vous voulez tous les mois .. vous auriez besoin de créer une table dimdate qui aura toutes les dates ... et ensuite se joindre à elle.

declare @passeddate=Now() --date to be calculated 
    declare @fruit_id=2 --fruit id to be calculated 
    Select 
      fruit_id as FruitId, 
      Sum(price) as MonthPrice, 
      Month(date) as FruitMonth 
    from SQL_Table 
    group by FruitMonth,FruitId 
    where [email protected]_id and 
    Year(date)=Year(@passeddate) 
+0

êtes-vous sûr de ce bit '@ fruit_id = '01/02/2010'' –

+0

mis à jour ma réponse. – Vishal

Questions connexes