Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Getting most recent orders?
Message
 
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Miscellaneous
Thread ID:
01249462
Message ID:
01324705
Views:
15
>>>Try
>>>
>>>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)
>>>
>>
>>Hi Sergey,
>>
>>This select will return the same result (VFP9 only). I'm wondering which one is better?
>>
>>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
>
>Run tests and tell us.

I finally had a chance to run some tests yesterday. I'm not sure these are the proper tests (since I have only small dataset in Northwind database), but these are my results.
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.
If it's not broken, fix it until it is.


My Blog
Previous
Reply
Map
View

Click here to load this message in the networking platform