以下のクエリは、null されていないすべてのトランザクションを一覧表示するものです。目的は、すべての開かれたトランザクション ID (顧客注文を表す) とその請求番号を含むリストを取得することです。
Table 1
transactionID
bookdate
cost
year
Table 2
transactionID
invoice
year
SELECT 1.transactionID, Sum(cost), 1.Max(bookdate), 2.invoice
FROM 1
LEFT JOIN 2
ON 1.transactionID = 2. transactionID AND 1.year = 2.year
GROUP BY 1.transactionID, 2.invoice
HAVING (Sum(cost)<>0)
私の問題は、トランザクション ID が毎年再利用されることです。そのため、実際のトランザクション ID と表 2 の請求書の間で年が一致することを確認する必要があります。
すべての transactionID には、予約日が異なる複数のトランザクションがあります。これは、1 つのトランザクションが 2011 年と 2012 年に発生した可能性があることを意味します。クエリで、開いているトランザクション ID ごとに最も早い予約日に対応する年を検索する必要があります。
例えば:
表1
1 | 20120101 | -20 | 2012
2 | 20120501 | -100 | 2012
2 | 20110501 | 100 | 2012
1 | 20110801 | 50 | 2011
表 2
1 | invoice X | 2012
2 | invoice Y | 2012
1 | invoice old | 2011
結果は
1 | 30 USD | Invoice old