Mon code est super maladroit. Pourriez-vous gars s'il vous plaît fournir une meilleure façon d'obtenir le résultat
Tables: Produits et commandes P>
SELECT
Products.ProductID
FROM
Products
JOIN Orders
ON Products.ProductID = Orders.ProductID
WHERE
Products.ProductID NOT IN (
SELECT
Products.ProductID
FROM
Products
JOIN Orders
ON Products.ProductID = Orders.ProductID
WHERE
Orders.OrderDate >= DATEADD(day, -90, GETDATE())
GROUP BY
Products.ProductID
)
GROUP BY
Products.ProductID
4 Réponses :
Comment sur n'existe pas code> et aucune jointure? select p.*
from products p
where not exists (select 1
from orders o
where o.product_id = p.product_id and
o.orderdate >= dateadd(day, -90, getdate())
);
Bonjour Gordon, merci de répondre. Je suis un débutant absolu. Pourriez-vous s'il vous plaît dites-moi quelle est l'utilisation de '1' après avoir sélectionné. Aussi, puis-je utiliser O.OrderDate> = getDate () - 7
@Jithukarthik A Sélectionnez l'instruction CODE> requiert une liste Sélectionnez i> de colonnes et / ou d'expressions à revenir. Lorsqu'il est utilisé dans un Existe code> la liste de sélection est ignorée, mais la syntaxe nécessite que vous sélectionniez quelque chose. 1 code>, 42 code> ou même null code> suffira.
@Jithukarthik. . . Le 1 code> est la chose la plus facile à taper, comme explique Habo. Et oui, SQL Server reconnaît qu'une DateTime moins un entier doit être interprétée comme un nombre de jours. Je suggérerais que comme un commencement, vous n'utilisez pas de tels raccourcis.
Je ne suis pas sûr que vous ne pouvez pas inverser votre condition et sélectionner à la place de tous les produits qui avaient des ventes plus tôt ces derniers jours auparavant?
SELECT Products.ProductID FROM Products INNER JOIN Orders ON Products.ProductID = Orders.ProductId WHERE Orders.OrderDate < DATEADD(day, -90, GETDATE()) GROUP BY Products.ProductID
Essayez ci-dessous ou supprimez simplement votre sous-sélection après la prise de consigne Garder juste Sélectionnez ProductID à partir de produits Rejoignez les commandes sur ... et
Ordres.orderdate> = daadd (jour,
-90, getDate ()) code>
Bonjour, merci pour la réponse. Je veux juste savoir si ces deux filtres ont le même effet où order_date> = daadd (jour, -90, getDate ()) 'et' où order_date> = getDate () -90
En ce qui concerne ses jours d'addition, tout irait bien, mais peut-être peut-être de devenir manuel pour vous en cas de calcul comme des mois ou des années comme une valeur de jours sur l'ajout d'années ou de mois
Je pense que l'utilisation d'un CTE pourrait vous donner une solution assez simple.
WITH CTE_ActiveList AS (
SELECT DISTINCT
O.ProductID
FROM
Orders O
WHERE
O.OrderDate >= DATEADD(day, -90, GETDATE()))
SELECT P.ProductID from Product P
LEFT JOIN CTE_ActiveList L
ON P.ProductID = L.ProductID
WHERE L.ProductID IS NULL