SQL compter de la date de la gamme
Je suis en train d'interroger ma base de données SQL pour obtenir le nombre de commandes effectuées par chaque client dans une certaine plage de dates.
J'ai une liste de commandes comme suit
CustomerName ClientID DateOrdered
Customer No.2 10 2011-11-25
Customer No.3 11 2011-10-15
Customer No.3 11 2011-11-25
et je veux être en mesure de savoir combien de commandes ont été faites par un client spécifique, par exemple entre 2011-11-1 et 2011-11-30, il devrait en résulter :
CustomerName ClientID Number
Customer No.3 11 1
Customer No.2 10 1
Jusqu'à présent, j'ai réussi à obtenir ce
SELECT CustomerName, ClientID, COUNT(*) AS Number
FROM Orders t
GROUP BY CustomerName, ClientID
HAVING COUNT(*) =
(SELECT MAX(Number)
FROM
(SELECT CustomerName, ClientID, COUNT(*) AS Number
FROM Orders
GROUP BY CustomerName, ClientID ) x
WHERE CustomerName = t.CustomerName )
Qui me donne à chaque commande, le client a jamais fait
CustomerName ClientID Number
Customer No.3 11 2
Customer No.2 10 1
Vais-je sur la bonne façon de résoudre ce problème ou est-il un moyen plus simple que j'ai complètement négligé!
- hors sujet: Pourquoi vous avez CustomerID et CustomerName dans le tableau de commande? Pour toute autres informations sur le client, vous devrez joindre à la clientèle tablw. Si vous tapez le nom du client et de vous corriger, vous aurez besoin de réviser la table des commandes de changement ainsi. Si seulement la clé étrangère de l'Id client serait plus exact...
- Il ne devrait même pas être là! Merci de me rappeler de le prendre 🙂
Vous devez vous connecter pour publier un commentaire.
Ce que cela fait, est d'utiliser une sous-requête qui filtre les lignes par les dates dans un mois donné (qui semble être ce que vous cherchez). Puis il regroupe par l'
CustomerName
etClientID
et obtient la somme de leurs commandes.sum
de ...? Est-il vraiment travailler dans SQL Server?datediff(mm, DateOrdered, getdate())
- il de l'utilisation de l'indice, s'il est disponible?Devrait fonctionner correctement:
En fonction de la base de données, la syntaxe de la DateOrdered de sélection peuvent avoir besoin d'être varié.
DateOrdered >= '2011-11-01' and DateOrdered < '2011-12-01'
. Une ordonnance pourrait se produire à 23:59:59.1, qui auraient échappé à labetween
de la syntaxe.DateOrdered >= '2011-11-01' AND DateOrdered < '2011-12-01'
. En faisant de la date de fin exclusive (à l'aide de<
), vous n'avez pas besoin de soins, si la date comprend un temps ou non."
ici...