2014-07-22 3 views
0

J'essaie d'obtenir le prix le plus récent dans la table de données. Les données sortiraient comme par exemple:SQL Left Joindre Sous-requête Numéro

Part Price Date

----- ----- --------

10525 .25 1/1/2010

10525 5.00 7/6/2014

10526 4.25 7/1/2014

J'ai essayé d'utiliser une jointure pour que je puisse obtenir le résultat de « 10525 5,00 06.07.2014 », mais il me donne cette erreur:

The column prefix 'orderdtl' does not match with a table name or alias name used in teh query. Statement(s) could not be prepared."

Si je prends la jointure, cela fonctionne très bien. Où vais-je mal?

SELECT orderdtl.partnum, orderdtl.docunitprice, orderhed.orderdate 
FROM mfgsys80.dbo.orderdtl AS orderdtl, mfgsys80.dbo.orderhed AS orderhed 
INNER JOIN(
    SELECT orderdtl.partnum, MAX(orderhed.orderdate) AS 'maxDate' 
    FROM mfgsys80.dbo.orderdtl AS orderdtl, mfgsys80.dbo.orderhed AS orderhed 
    GROUP BY orderdtl.partnum 
) AS Temp 
    ON orderdtl.partnum = Temp.partnum AND orderhed.orderdate = Temp.maxDate 
WHERE orderdtl.ordernum = orderhed.ordernum AND ((orderdtl.custnum=74)) 
ORDER BY orderdtl.partnum 

Répondre

0

Vous vous demandez si la formation est incorrecte. Il devrait être comme

SELECT orderdtl.partnum, orderdtl.docunitprice, orderhed.orderdate 
FROM mfgsys80.dbo.orderdtl AS orderdtl 
JOIN mfgsys80.dbo.orderhed AS orderhed 
ON orderdtl.ordernum = orderhed.ordernum 
INNER JOIN(
    SELECT ol.partnum, MAX(od.orderdate) AS 'maxDate' 
    FROM mfgsys80.dbo.orderdtl ol 
    JOIN mfgsys80.dbo.orderhed od 
    ON ol.ordernum = od.ordernum 
    GROUP BY ol.partnum 
) Temp 
ON orderdtl.partnum = Temp.partnum 
AND orderhed.orderdate = Temp.maxDate 
WHERE orderdtl.custnum=74 
ORDER BY orderdtl.partnum 
+0

Merci pour votre aide! Mon SQL est assez rouillé, mais ce que vous avez fait est logique maintenant que je le vois. – Error