J'essaie d'analyser les clients que nous avons fait des affaires avec l'année précédente (2017) mais maintenant cette année (2018). Comment puis-je obtenir les noms des clients qui nous ont rendu à nous en 2018. J'utilise SSMS 2016.
échantillons de données: p> La requête ci-dessus retourne la requête 2017 Mais rien ne dit si les numéros 2018 ont été filtrés à l'avance ou non. P> Résultats demandés: P> Client_ID Client_Name
754 postgresql
344 oracle
154 toad
3 Réponses :
Vous pouvez utiliser Existe comme Vous pouvez également utiliser in () code> comme p>
Vous pouvez utiliser n'existe pas code> et une sous-requête corrélée. SELECT t1.client_id,
t1.client_name
FROM my_table t1
WHERE t1.order_date >= '2017-01-01'
AND t1.order_date < '2018-01-01'
AND NOT EXISTS (SELECT *
FROM my_table t2
WHERE t2.client_id = t1.client_id
AND t2.order_date >= '2018-01-01'
AND t2.order_date < '2019-01-01');
Pour accomplir cette tâche, j'utilise généralement la clause "ayant" "bien que si vous avez une grande quantité de données à traiter, vous pourriez avoir besoin de quelque chose de plus efficace.
and min(year(order_date)) < 2018
Merci, max code> obtiendra les nouveaux clients aussi bien que l'ancien pour 2018, mais qu'est-ce que min code> refait à nouveau?
'Min' peut être utilisé pour exclure les clients en fonction de la date de transaction la plus ancienne. Par exemple, si vous vouliez trouver des clients qui sont devenus clients pour la première fois en 2017, se sont poursuivis jusqu'en 2018 et ne continuaient pas votre entreprise en 2019. Ensuite, Min (année (Arrête_date)) = 2017 code> et Max (Année (Commande_Date)) = 2018 CODE> - Je ne l'ai plus inclus pour l'exhaustivité qui peut être trompeuse. Je pense que "max" suffira pour votre besoin.