首先,我應該說我發現很難用幾個簡短的詞來表達下面的問題,因此這個可怕的問題題目。非常歡迎提出改進建議。通過...訂單查詢結果?
我們真正的問題...
考慮下面的示例,爲客戶和發票無序數據...
編輯我已經創建了以下
一個SQL Fiddle客戶資料
customer_id name
------------------
1 Gary
2 Jeremy
3 Marcia
4 Danielle
發票數據
invoice_id customer_id created_date amount
------------------------------------------------
1 1 2008-01-01 500.00
2 1 2011-01-01 600.00
3 1 2012-01-01 100.00
4 1 2012-01-01 550.00
5 2 2008-01-01 600.00
6 2 2012-01-01 200.00
7 2 2013-01-01 1000.00
8 3 2012-01-01 300.00
9 3 2013-01-01 100.00
10 3 2009-01-01 250.00
11 4 2010-01-01 300.00
12 4 2011-01-01 700.00
13 4 2012-01-01 500.00
...怎麼會查詢被寫入到下面的方式返回數據...
- 第一行中的最古老的發票。如果同一年齡的發票超過1張,那麼年齡相同的發票中,發票金額最大。如果超過1張相同年齡和金額的發票,則分類變得無關緊要。
- 第二行中與第一行相同的客戶的下一個最早的發票。同樣,如果超過1張相同年齡的發票,發票金額最大。如果超過1張相同年齡和金額的發票,則分類變得無關緊要。
- 重複#2,直到該客戶沒有更多發票。
- 針對不同客戶的下一個最早的發票。如果超過1張相同的發票,那麼,那些年齡相同的發票,發票金額最大。如果超過1張相同年齡和金額的發票,則分類變得無關緊要。
- 對#4同一客戶重複#2。
- 重複#5,直到該客戶沒有更多發票。
- 重複#4,#5,#6
因此,對於上面的樣本數據,所希望的結果會是...
customer_name invoice_id created_date amount
--------------------------------------------------
Jeremy 5 2008-01-01 600.00 <-- this is the joint "oldest" invoice with id 1 but has a greater amount.
Jeremy 6 2012-01-01 200.00 <-- this is the next "oldest" invoice for the same customer as the previous row.
Jeremy 7 2013-01-01 1000.00
Gary 1 2008-01-01 500.00 <-- no more invoice for previous customer, so this is the next "oldest" invoice for a new customer
Gary 2 2011-01-01 600.00
Gary 4 2012-01-01 550.00 <-- same age as inv_id 3 but larger amount
Gary 3 2012-01-01 100.00
Marcia 10 2009-01-01 250.00
Marcia 8 2012-01-01 300.00
Marcia 9 2013-01-01 100.00
Danielle 11 2010-01-01 300.00
Danielle 12 2011-01-01 700.00
Danielle 13 2012-01-01 500.00
爲了得到更廣泛的背景爲這個問題,結果將被用於追蹤發票的付款,最老的和最「優先」的是最高優先級,但也可以看到所有客戶的發票分組在一起。
P.S.我用的MS SQL Server 2008工作
我忘了顧客。我修復了我的查詢。客戶按名稱排序。 – 2013-04-10 09:47:45
我更新了我的答案。我不知道sqlfiddle.com。這很棒 :)。 Thx分享。 – 2013-04-10 10:41:11