premier message alors s'il vous plaît soyez patient :) Je tiens à compter le nombre de clients qui ont passé une commande dans un mois spécifique et trouvent le nombre de commandes qu'ils ont placées dans ce mois et les 11 mois précédant ce mois-ci. Je ne suis vraiment pas sûr de savoir où commencer une aide afin que toute aide serait grandement appréciée, je me rendrais aussi assez vague, donc il peut y avoir quelques questions de suivi
J'ai actuellement une table de la clientèle, des ordonnances et la date de leur Commandez comme ci-dessous: p>
p>
Date CustomerCount 12MonthOrderCount Jan 2017 2 3 Dec 2016 1 1
6 Réponses :
Si vous utilisez T-SQL, vous pouvez utiliser ci-dessous Query
select t1.CusttomerIdfrom table1 t1
outer apply
(
select top 1 t2.CId, t2.OrderId from table2 t2
where t2.CID = t1.CustomerId and [Date] = specificDate
)q
Comme il y a beaucoup d'inconnues dans votre question, j'ai pris la liberté de faire de nombreuses hypothèses. L'un d'eux est que vous utilisez MSSQL. Ce code pourrait vous indiquer une direction possible.
USE TEMPDB
DECLARE @Period INT
SET @Period = YEAR ( '20190101') * 100 + MONTH ('20190101')
CREATE TABLE #T (CustID INT, OrderInPeriod INT, NumberOfOrders INT)
INSERT INTO #T
SELECT CustID, 0, 0
FROM Customers
UPDATE #T
SET OrderInPeriod = 1
FROM Orders AS O
WHERE #T.CustID = O.CustID
AND YEAR (OrderDate) * 100 + MONTH (OrderDate) = @Period
UPDATE #T
SET NumberOfOrders = ( SELECT COUNT(*) AS Cnt FROM Orders AS O
WHERE #T.CustID = O.CustID
AND OrderDate > DATEADD (YEAR, -1, '20190101')
Je pense que vous voulez utiliser une fonction de fenêtre pour cette Voir ici p>
Si vous ne les avez pas vérifiées déjà, je le ferais. P>
Pour obtenir la table de base, utilisez l'agrégation:
select year(orderdate), month(orderdate), count(*) as num_orders,
(select count(*)
from orders o2
where year(o2.orderdate) * 100 + month(o2.orderdate) > year(o.orderdate) * 100 + month(o.orderdate) - 12 and
year(o2.orderdate) * 100 + month(o2.orderdate) <= year(o.orderdate) * 100 + month(o.orderdate)
) as num_12month_orders
from orders o
group by year(orderdate), month(orderdate);
Je suppose que vous voulez savoir combien de commandes dans le mois actuel.
Sélectionnez comment activer le texte dans vos colonnes de commandeDate sur une date code> DataType. p> li>
Utilisez la date appropriée Arithmétique dans l'endroit où les déclarations. P> Li> OL>
1: Ce type d'expression vous obtient un Date code> Afficher le premier jour du mois à partir de mon yy code> Cet exemple retourne 2018-02 -01 code>. P> SELECT CustomerId, CustomerCount, 12MonthOrderCount
FROM ( /* the query showing the full year data */ ) yr
FROM ( /* the query showing the month data */ ) mon ON yr.CustomerId=mo.CustomerId
Vous pouvez utiliser le code suivant pour obtenir les résultats souhaités.
select count (distinct CustomerID) as 'CustomerCount', count (OrderID) as '12MonthOrderCount' from orders where (OrderDate <= '2017-01-01' AND OrderDate >= '2016-01-01')
Veuillez poster des échantillons de données pour vos tables, expliquer comment les tables rejoignent (si ce n'est pas évident) ainsi que vos résultats souhaités de cette exemple de données. Vous pouvez consulter un site comme celui-ci pour l'aide pour le formatage des données d'une manière qui fonctionne bien ici sur tellement.
Vous devez également décider quel DBMS vous utilisez réellement. MySQL <> SQL Server et la réponse seront assez différentes pour chacune d'elles.
Qu'est-ce que tu as essayé jusque-là?
J'ai ajouté des données d'échantillonnage et le résultat souhaité des données de la table, merci pour votre patience!