반응형
왼쪽 조인의 가장 최근 레코드
SqlServer에 다음과 같은 세 개의 테이블이 있다고 가정해 보십시오.
Customer (CustomerID, FirstName, LastName)
Address (AddressID, CustomerID, Line1, City, State)
Product (ProductID, CustomerID, Description)
고객은 여러 배달 주소와 여러 제품을 가질 수 있습니다.
제가 하고 싶은 것은 가장 최근의 주소 기록에 의해 국가가 결정되는 각 주의 고객 수를 나열하는 것입니다.예를 들어 "각 주에서 마지막으로 제품을 받은 고객 수"따라서 고객의 이전 주소 기록에는 관심이 없으며, 가장 최근 주소로 결정된 주소 기록에만 관심이 있습니다.신분증).
State | Number of Customers
--------------------------
CA | 32
GA | 12
TX | 0
OH | 18
저는 보통 다음과 같은 일을 합니다.
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
그러나 고객이 여러 개의 주소를 가질 수 있는 경우 고객은 가장 최근의 주소 레코드 상태로만 계산됩니까?
추신. 위는 제가 달성하고자 하는 조인을 쉽게 설명하기 위한 순수한 예시 시나리오이며 실제 시스템 설계를 반영하지 않습니다.
사용해 보십시오.
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
AND a.AddressID =
(
SELECT MAX(AddressID)
FROM Address z
WHERE z.CustomerID = a.CustomerID
)
WHERE p.ProductID = 101
GROUP BY a.State
SQL Server 구문을 올바르게 기억하고 있다고 가정하면 다음을 시도할 수도 있습니다.
SELECT state, count(customer_id)
FROM (
SELECT
p.customer_id
, (SELECT TOP 1 State FROM Address WHERE Address.CustomerID = p.CustomerID ORDER BY Address.ID DESC) state
FROM Product p
WHERE p.ProductID = 101)
GROUP BY state
주문 및 주문 세부 정보 테이블 없이 어떻게 이 작업을 수행할 수 있는지 모르겠습니다.주문 표에는 고객이 포함됩니다.ID 배송 날짜 및 배송지 주소ID 및 주문 세부 정보에는 주문이 포함됩니다.ID 및 제품ID. 그런 다음 중첩된 쿼리를 사용하여 가장 최근의 주문(및 가장 최근의 주소)을 확인하고 주문 세부 정보에 연결하여 제품을 주문한 다음 원하는 제품을 필터링해야 합니다.
언급URL : https://stackoverflow.com/questions/725153/most-recent-record-in-a-left-join
반응형
'programing' 카테고리의 다른 글
| 모두 제거모두 제거쿼리가 있는 태그 (0) | 2023.06.21 |
|---|---|
| C#의 저장 프로시저 출력 파라미터 사용 (0) | 2023.06.21 |
| WPF에서 종속성 속성과 연결된 속성의 차이점은 무엇입니까? (0) | 2023.06.21 |
| 원격 저장소의 특정 버전 GitClone (0) | 2023.06.21 |
| Git 하위 모듈의 추적되지 않은 상태를 제거하는 방법은 무엇입니까? (0) | 2023.06.21 |