Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Getting most recent orders?
Message
 
 
To
11/09/2008 14:10:10
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Miscellaneous
Thread ID:
01249462
Message ID:
01346751
Views:
7
>>
>>SELECT Customer.CustomerID, Customer.CustName, Orders.OrderID, ;
>>			Orders.OrderDate, Orders.Destination ;
>>	FROM Customer ;
>>		LEFT OUTER JOIN orders ON Orders.CustomerID = Customer.CustomerID ;
>>	WHERE OrderDate = ( SELECT MAX(OrderDate) FROM Orders Recent WHERE Recent.CustomerID = Orders.CustomerID) 
>>
>
>Now I've got a new twist on this - I need to include ALL customers, even those without an order. The above SQL filters those out. I've been beating my head against it without success. Any ideas?

You may add UNION to your original select to get customers without orders.

E.g.
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
UNION 
SELECT CUST.CustomerID, ;
		CUST.CompanyName, cast(0 as Integer) as OrderID, {} as OrderDate, 
cast('' as char(10)) as ShipRegion from Customers LEFT JOIN Orders on Customers.OrderID = Orders.OrderID 
where Orders.OrderID IS NULL
Another way
SELECT Customer.CustomerID, Customer.CustName, Orders.OrderID, ;
			Orders.OrderDate, Orders.Destination ;
	FROM Customer ;
		LEFT OUTER JOIN orders ON Orders.CustomerID = Customer.CustomerID ;
	WHERE OrderDate = ( SELECT MAX(OrderDate) FROM Orders Recent 
WHERE Recent.CustomerID = Orders.CustomerID)  or Orders.OrderID IS NULL
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