Je me demande si je peux faire cela en utilisant une requête SQL. J'ai une table appelée "data" qui contient le nom du produit, la date et le numéro de vente.
ma table ressemble à ceci:
Product date Sale apple 1/1/2019 5 apple 2/1/2019 4 apple 3/1/2019 3 apple 4/1/2019 2 apple 5/1/2019 1 orange 1/1/2019 1 orange 2/1/2019 2 orange 3/1/2019 3 orange 4/1/2019 4 orange 5/1/2019 5 pear 1/1/2019 6 pear 2/1/2019 4 pear 3/1/2019 3 pear 4/1/2019 2 pear 5/1/2019 5 strawberry 1/1/2019 6 strawberry 2/1/2019 3 strawberry 3/1/2019 7 strawberry 4/1/2019 4 strawberry 5/1/2019 2
Je voudrais définir un SQL requête pour trouver le (s) produit (s) qui ont augmenté le nombre de vente à certaines dates 2.
par exemple trouver tous les produits dont le numéro de vente au 01/03/2019 est supérieur au 01/01/2019 et il devrait renvoyer orange et fraise.
Je suis assez nouveau dans le monde de la programmation et toute aide est appréciée. Merci d'avance!
3 Réponses :
Vous pouvez essayer d'utiliser la sous-requête corrélée
DEMO strong >
select name,sdate,amount from data a where exists ( select 1 from data b where a.name=b.name and b.sdate in ('1/1/2019','3/1/2019') and b.amount>a.amount and a.sdate<b.sdate ) and a.sdate in ('1/1/2019','3/1/2019') OUTPUT: name sdate amount orange 01/01/2019 00:00:00 1 strawberry 01/01/2019 00:00:00 6
Merci pour votre réponse. Je ne comprends pas très bien ce que sont t1 a et t1 b. Je vais vérifier la sous-requête corrélée et étudier un peu votre code suggéré.
En quel sens une date est-elle plus grande qu'une autre (à l'exception évidente de mon anniversaire)?
DECLARE @FasatDate Date ='3-1-2019' DECLARE @SecondDate Date ='1-1-2019' SELECT T1.Product,T1.[date] FasatDate,T1.Sale FasatDateSale,T2.[date] SecondDate,T2.Sale SecondDateSale FROM ( SELECT * FROM DATA AS [DA] WHERE [DA].[date]=@FasatDate) T1 INNER JOIN ( SELECT * FROM DATA AS [DA] WHERE [DA].[date]=@SecondDate)T2 on t1.Product = t2.Product AND t1.Sale>t2.Sale
Vous pouvez le faire en tant que JOIN
, mais je recommanderais:
select product from t where t.date in ('1/1/2019', '3/1/2019') group by product having (sum(case when t.date = '1/1/2019' then sales end) < sum(case when t.date = '3/1/2019' then sales end) );
Remarque: vous devez utiliser des formats de date standard pour vos constantes de date - soit '2019-01-03' ou '2019-03-01
' selon ce que vous voulez dire.
Vous pouvez également le faire en utilisant l'agrégation:
select t1.*, t2.sales from t t1 join t t2 on t2.product = t1.product and t2.sales > t1.sales where t1.date = '1/1/2019' t2.date = '3/1/2019';
Ce n'est pas un site de codage gratuit. Veuillez d'abord partager vos efforts, puis la communauté contribuera à vous aider pour un problème spécifique.
Quel serveur de base de données utilisez-vous?
Je ne connais pas SQL. Mais mon meilleur essai est de SELECTIONNER le produit, la date FROM data WHERE date = xxxx OU date = xxxx. Cela donne un tableau mais je ne sais pas comment faire la comparaison par la suite.
C'est bon. faites-moi savoir quel serveur de base de données utilisez-vous? (Oracle, SQL Server, MySQL?)
J'utilise MySQL ....
1. Corrigez votre schéma. Stockez les dates sous forme de dates. Ensuite, consultez meta.stackoverflow.com/questions/333952/...