2011-10-02 3 views
0

Je voudrais obtenir tous les clients qui se sont inscrits et achetés le même jour étant donné une date de début et de fin.Requête SQL pour trouver les clients qui se sont inscrits et achetés le même jour

Ci-dessous le schéma:

utilisateurs

--CustId 
--PostedDate 

Ordre

--OrderId 
--CustId 
--PostedDate 

Comment puis-je écrire une requête pour tirer le même jour enregistré et acheté les commandes dans un délai de date précise?

+0

Ce ne sont pas des schémas complets. Les champs DateDate ou Datetime sont-ils renseignés? –

Répondre

1
SELECT DISTINCT 
    Users.CustId 
FROM 
    Users JOIN Order ON Users.CustId = Order.CustId 
WHERE 
    DATE(Users.PostedDate) = DATE(Order.PostedDate) 
    AND Users.PostedDate BETWEEN @start_date AND @end_date` 

Cela suppose PostedDate est un champ datetime et non la date. S'il s'agit en fait d'un champ de date, DATE(Users.PostedDate) = DATE(Order.PostedDate) peut être raccourci à Users.PostedDate = Order.PostedDate, puis cette partie de la clause WHERE peut être candidate à l'utilisation de l'index.

+0

Merci richard.Je me sens mal de ne pas avoir pris plus de temps pour trouver la solution avant de poster la question sur le débordement de la pile. Besoin d'une pause. – Sam

0
SELECT * 
FROM Users, Order 
WHERE Users.CustId = Order.CustId AND 
     Users.PostedDate = Order.PostedDate 
+0

Cela fonctionne.Mais dire que j'ai besoin de trouver les clients qui se sont inscrits et achetés le même jour entre 01/09/2011 et 01/10/2011. Comment je fais ça? – Sam

+0

@Sam: ceci va trouver les commandes qui ont été ajoutées le jour même où l'utilisateur a été enregistré – genesis

1

Que diriez-vous

SELECT u.CustId FROM Users AS u 
INNER JOIN Orders AS o 
ON u.CustId = o.CustId AND u.Posted Date = o.PostedDate 
WHERE u.PostedDate BETWEEN @Date1 AND @Date2 

Hope this helps.

0
SELECT u1.CustId FROM Users u1, Order o1 WHERE u1.CustId = o1.CustId AND 
    u1.PostedDate = o1.PostedDate and o1.PostedDate between 
    to_date('<startdate>','<oracleformat>') and to_date('fromdate','<>')+1 
Questions connexes