2010-06-15 6 views
4

Im un peu coincé et ne peux pas obtenir ma tête autour de ce MySQL. Voici mes tableaux abrégés Je souhaite interroger:Sélectionnez une ligne pour chaque valeur différente de la colonne, MySQL

impression (printID, eventID, PrintTime)

ventes (saleID, eventId, saleTime)

Je souhaite obtenir la dernière fois d'impression pour chaque événement, sélectionnez les ID de vente ayant cet ID d'événement avec un délai de vente supérieur à la dernière heure d'impression. J'ai essayé plein de façons mais je ne peux pas le comprendre. S'il vous plaît aider!

Répondre

0

Pour obtenir la dernière fois d'impression:

SELECT MAX(p.printTime), p.eventID FROM print p 

Vous pouvez l'utiliser dans une sous-requête pour obtenir ce dont vous avez besoin:

SELECT s.saleID, s.eventID 
     FROM sales s 
INNER JOIN (SELECT MAX(p.printTime) AS lastPrintTime, p.eventID 
       FROM print p 
      GROUP BY p.eventID) print_time 
WHERE print_time.eventID = s.eventID 
    AND s.saleTime > print_time.lastPrintTime 

Est-ce que l'aide?

4
select s.saleID, s.eventID, s.saleTime, lp.LastPrintTime 
from (
    select eventID, max(printTime) as LastPrintTime 
    from print 
    group by eventID 
) lp 
inner join sales s on lp.eventID = s.eventID 
    and saleTime > lp.LastPrintTime 
+0

wow, m'a battu au poinçon de 30 secondes ... –

0

requête interne:

SELECT * FROM sales AS s INNER JOIN 
(
    SELECT eventID, max(printTime) as maxPrintTime FROM [print] GROUP BY eID 
) as p ON p.eventID = s.eventIDAND s.saleTime > maxPrintTime 
Questions connexes