나는 SQL Server 2008의 다음 표 R2 데이터베이스 있습니다가장 높은 인덱스 여러 null이 아닌 값을 반환하는 SQL은
고객 :
CustID CustName
====== ========
1 A
2 B
3 C
4 D
거래 :
TransID CustID InvoiceTotal LoyaltyPointsEarned
======= ====== ============ ===================
1 1 300 25
2 2 NULL 10
3 3 100 10
4 2 200 25
5 1 NULL 100
6 3 120 NULL
을
트랜잭션이 시간순으로 삽입됩니다 (상위 ID = 최근 순서). 트랜잭션을 사용하면 InvoiceTotal 또는 LoyaltyPointsEarned가 NULL이 될 수 있지만 둘다는 허용되지 않습니다.
나는 가장 최근의 null 이외의 송장 총을 얻으려면 모든 고객에게 적립 가장 최근의 null 이외의 로열티 포인트 각 고객에 대해 동일한 행에 표시이 정보, (이 까다로운 비트입니다) :
CustID CustName LatestInvoiceTotal LatestLoyaltyPointsEarned
1 A 300 100
2 B 200 25
3 C 120 10
다음 쿼리는 최신 송장 총을 제공 :
이이 결과에 고객 기록을 복제하지 않고, LoyaltyPointsEarned에 대해 동일한 작업을 수행하도록 확장 할 수있는 방법SELECT DISTINCT
CustID, CustName, LatestInvoiceTotal, LatestLoyaltyPointsEarned
FROM
Customers
INNER JOIN
(SELECT
CustID, InvoiceTotal AS LatestInvoiceTotal, TransID
FROM
Transactions
GROUP BY
CustID, InvoiceTotal, TransID) CustomerTransactions ON Customers.CustID = CustomerTransactions.CustID
INNER JOIN
(SELECT
CustID, MAX(TransID) AS MaxTransID
FROM
Transactions
WHERE
InvoiceTotal IS NOT NULL
GROUP BY
CustID) MaxTransactionIDs ON Customers.CustID = MaxTransactionIDs.CustID AND CustomerTransactions.TransID = MaxTransactionIDs.MaxTransID
?
, 덕분에 여기
테스트 시나리오입니다. 내림차순으로 내림차순으로 바꾸어야했습니다 (SQL Server 2008 R2). – pdm2011수정 됨 :-). SQL Server의 특성에 익숙해졌습니다. –