Imagínese que tengo los siguientes 3 mesas en SqlServer:registro más reciente en una izquierda unirse a
Customer (CustomerID, FirstName, LastName)
Address (AddressID, CustomerID, Line1, City, State)
Product (ProductID, CustomerID, Description)
Un cliente puede tener varias direcciones de entrega y productos Mulitple.
Lo que me gustaría hacer es enumerar el número de clientes para cada estado donde el estado se determina por el registro de dirección más reciente. Tales como "¿Cuántos clientes recibieron un producto por última vez en cada estado?". Por lo tanto, no estoy interesado en ningún registro de direcciones anterior para el cliente, solo el más reciente (determinado por AddressID).
State | Number of Customers
--------------------------
CA | 32
GA | 12
TX | 0
OH | 18
Me normalmente hacer algo como:
SELECT a.State, count(c.CustomerID)
FROM Product p
INNER JOIN Customer c ON c.CustomerID = p.CustomerID
LEFT JOIN Address a ON a.CustomerID = c.CustomerID
WHERE p.ProductID = 101
GROUP BY a.State
Sin embargo, como un cliente puede tener varias direcciones será el cliente sólo se contará en el Estado de la más reciente registro de dirección?
P.S. Lo anterior es puramente un escenario de ejemplo para explicar fácilmente las uniones que estoy tratando de lograr y no refleja un diseño de sistema real.
Justo lo que estaba buscando, muchas gracias. –
¡Genial! ahora, ¿por qué no pensé en esto? –
Esto estaba limpio. Felicitaciones a usted. –