2016-08-24 1 views
0

J'ai la table LabOrder avec la colonne Account, OrderNo, Createddate, cette table un Compte contient plusieurs orderno. Mais mon exigence est que je veuille récupérer des enregistrements pour ce compte particulier basé sur CreatedDate de comparer la semaine en cours avec une semaine précédente. Supposons que le compte ait créé 100 commandes la semaine précédente et que les commandes créées dans la semaine en cours soient de 50, nous souhaitons vous informer que ce compte de campagne actuel est inférieur ou égal aux commandes de la semaine précédente. Pour les besoins de notre entreprise, nous envoyons des courriels à ce compte particulier dont le compte courant de la semaine est inférieur à 50% par rapport aux commandes de la semaine précédente. Nous devons notifier ce compte.Comment calculer le pourcentage en Mysql?

Calculez la différence avec le nombre de commandes de la semaine en cours ou les commandes de la semaine précédente?

Comment satisfaire à cette exigence, mieux vaut chercher les enregistrements.

  1. Utiliser requête simple
  2. Créer vue
  3. Créer une procédure stockée

Je suit les données de table:

Nom de la table: LabOrder

Account  orderNo  CreatedDate 
-------------------------------------- 
101    13   2016-08-2 
102    56   2016-08-9 
103    79   2016-08-24 

Je veux des données comme ci-dessous. La procédure stockée comparera les commandes pour la semaine en cours et la semaine précédente et si cela est inférieur de 50%, le compte aura 50% de volume en moins.

Account CurrentWeekOrder PreviousWeekOrder Difference(%)    
--------------------------------------------------------------- 
101  50     10     -40 
102  60     180     120 -> This has to be notified 
103  30     25     5 -> No Need to notified 

Comment créer une procédure stockée pour les détails ci-dessus? S'il vous plaît aidez-moi, je suis un développeur Java et je n'ai pas créé de procédure stockée dans MySQL avant. C'est ma première tentative.

Je suis en train de créer la procédure stockée mais je suis face à beaucoup de problèmes comme la façon de stocker si la requête retourne plusieurs enregistrements .:

Si quelqu'un me donne l'idée de créer cette procédure stockée si toute suggestion.

Merci

+2

Vos données d'exemple n'ont rien à voir avec les résultats souhaités, ce qui rend la question difficile à comprendre. –

+0

Pourquoi voulez-vous une procédure stockée? – Strawberry

+0

@Strawberry que suggérez-vous? – Sitansu

Répondre

2

Je pense que la procédure stockée est pas un bon choix pour votre cas parce que chaque fois que l'utilisateur d'insérer un enregistrement, la base de données doit mettre à jour les enregistrements précédents de la même semaine. Je vous suggère d'utiliser la vue pour atteindre votre objectif. Voici ma solution pour vous:

  1. créer une vue avec le SQL

    suivant
    select 
        account, 
        count(*) as weekorder, 
        week(createDate) as createWeek 
    from 
        laborder 
    where 
        week(createDate) >= week(now()) - 1 ----last week and current week 
    group by 
        account, week(createDate) 
    
  2. supposer le nom de la vue est View1, vous pouvez maintenant interroger ce dont vous avez besoin:

    select 
        a.account, 
        a.weekorder as CurrentWeekOrder, 
        b.weekorder as PreviousWeekOrder, 
        a.weekorder/b.weekorder * 100 as Difference 
    from 
        view1 as a 
    left join 
        view1 as b on a.account = b.account and a.createWeek = b.createWeek - 1 
    where 
        a.createWeek = week(now()) and 
        a.weekorder/b.weekorder * 100 < 50 
    

Espérons que la méthode ci-dessus peut vous aider.

+0

Je ne voudrais pas déranger avec une vue, personnellement – Strawberry