>>>SELECT Customer.CustomerID, Customer.CustName, Orders.OrderID, ; >>> Orders.OrderDate, Orders.Destination ; >>> FROM Customer ; >>> INNER JOIN orders ON Orders.CustomerID = Customer.CustomerID ; >>> WHERE OrderDate = ( SELECT MAX(OrderDate) FROM Orders o2 WHERE o2.CustomerID = Orders.CustomerID) >>>>>
>>SELECT Customer.CustomerID, Customer.CustName, Orders.OrderID, ; >> Orders.OrderDate, Orders.Destination ; >> FROM Customer ; >> INNER JOIN orders ON Orders.CustomerID = Customer.CustomerID ; >> Inner JOIN (select Max(OrderDate) as Max_Date, CustomerID from Orders group by CustomerID) MaxOrders ; >>on Orders.CustomerID = MaxOrders.CustomerID and ; >>Orders.OrderDate = MaxOrders.Max_Date>
OPEN DATABASE HOME() + "\Samples\Northwind\Northwind" SET TALK OFF SET NOTIFY OFF LOCAL lnSec, lnElapsed, lnI lnSec = SECONDS() FOR lnI = 1 TO 1000 SELECT CUST.CustomerID, ; CUST.CompanyName, Orders.OrderID, Orders.OrderDate, ; Orders.ShipRegion FROM Customers CUST; INNER JOIN Orders ON Orders.CustomerID = CUST.CustomerID ; WHERE OrderDate = (SELECT MAX(OrderDate) FROM Orders o2 ; WHERE o2.CustomerID = Orders.CustomerID) INTO CURSOR curResults1 NEXT lnElapsed = SECONDS() - m.lnSec STRTOFILE('First Query 1000 runs: ' + TRANSFORM(m.lnElapsed) + " sec.","TestQueryResults.txt",1) lnSec = SECONDS() FOR lnI = 1 TO 1000 SELECT CUST.CustomerID, ; CUST.CompanyName, Orders.OrderID, Orders.OrderDate, ; Orders.ShipRegion FROM Customers CUST; INNER JOIN Orders ON Orders.CustomerID = CUST.CustomerID ; INNER JOIN (SELECT MAX(OrderDate) AS Max_Date, CustomerID ; FROM Orders GROUP BY CustomerID) MaxOrders ON Orders.CustomerID = MaxOrders.CustomerID AND ; Orders.OrderDate = MaxOrders.Max_Date INTO CURSOR curResults2 NEXT lnElapsed = SECONDS() - m.lnSec STRTOFILE(CHR(13) + CHR(10) + 'Second Query 1000 runs: ' + TRANSFORM(m.lnElapsed) + " sec." + CHR(13) + CHR(10),"TestQueryResults.txt",1) MODIFY FILE TestQueryResults.txt *!* First Query 100 runs: 1.156 sec. *!* Second Query 100 runs: 0.844 sec. *!* First Query 1000 runs: 11.438 sec. *!* Second Query 1000 runs: 7.703 sec.