2009-10-22 8 views
0

Products (productId INT PK, bidCount INT)Calcul des offres uniques sur un produit

Enchères (bidID INT PK, productId INT, userId INT, BIT isCounted, créé DATETIME)

Il y a un 1: nombre relation entre un produit et des offres. Chaque cycle d'attente dure 1 jour. J'ai donc besoin de suivre les enchères uniques par jour et de mettre à jour la colonne bidCount. Je définis isCounted = 1 pour chaque ligne que je traite pendant le traitement par lots.

Il s'agit donc d'un total cumulé d'offres uniques pour un produit tout au long de la journée.

J'ai un travail SQL qui s'exécute toutes les 5 minutes pour mettre à jour le BidCount.

étapes que je pense que je dois pour cette requête:

  1. saisir toutes les lignes qui ont isCounted = 1
  2. requête # 1 Dressez une liste de productID et uniqueBidCounts où isCounted = 1 requête # 2 construire un liste des productID et uniqueBidCounts où isCounted = 0 requête # 3 construire une liste de productID et uniqueBidCounts avec la différence entre # 1 et # 2
  3. mise à jour de la table de produits en ajoutant les uniqueBidCounts à la colonne bidCount en utilisant la requête n ° 3
  4. régler le isCounted = 1 pour t La liste dans la requête n ° 2

Est-ce la bonne approche? Est-ce une approche compliquée ou peut-elle être simplifiée?

Updated J'ai ajouté le champ DateHeure créé, donc je vais devoir filtrer le jour en cours et supprimez toutes les offres plus anciennes dans un autre travail de traitement par lots tous les jours (ou dans le même processus)

+0

Comment pouvez-vous savoir si une offre est dans un cycle d'enchères? Voulez-vous dire que chaque productId est unique au cycle d'enchères d'un jour? – Tim

+0

tim, j'ai ajouté le timbre datetime dans la table des offres merci. – mrblah

Répondre

0

Pourquoi ne n'utilisez-vous pas de déclencheur? Si j'ai bien compris votre problème, vous pouvez placer le trigger sur insert dans la table des offres. Dans ce déclencheur, vous allez incrémenter BidCount dans la table de produits appropriée. Et vous pouvez également créer une planification, qui sera exécutée à minuit, et définira bidCount à 0.

+0

Ce ne sera pas unique, ce sera juste le compte. – Tim

+0

Oh, ouais, je vois maintenant, j'ai mal compris la question. – user132371

0

Je pense que isCounted est la mauvaise direction pour vous. Vous devrez effectuer une requête pour toutes les enchères de ce jour et grouper par userId et exécuter un compte sur les lignes et insérer ce nombre dans BidCount.

Il s'agit d'un nombre total de enchères uniques pour un produit tout au long de la journée.

Vous ne pouvez pas vraiment avoir un nombre total d'unités uniques, car vous devez les ré-utiliser à chaque fois que vous exécutez. Donc, si elle a déjà été comptée ou non.

Questions connexes