1

ライターズブロックの瞬間があるようです。

特定の日付のクライアントとアカウントごとの最大支払いを返すクエリが必要です。

2 つのテーブルは、1 つは顧客データとクライアント データ (クライアント 1 には 50 人の顧客がいるとします) に使用され、2 つ目のテーブルは受け取った支払いと日付に使用されます。

だから私は示す表が欲しい:

Client | Account | Paid   | Date
----------------------------------------
   1   | 1234    | £2.99  | 01/11/2012
   2   | 1235    | £4.99  | 08/12/2012

それが理にかなっていることを願っています!私の頭では、それはかなり単純なはずです!!

ありがとう

4

3 に答える 3

0

この質問は非常に興味深いものでした。この問題は、集計クエリを使用して解決されます。

SQL フィドル: http://www.sqlfiddle.com/#!3/29256/1/0

select d.[Client], c.[Account],
max([Paid])as 'PAID', 
d.[Date] 
from Customer c, Data d where
d.[Client] = c.[Client] 
group by d.[Client],c.[Account],d.[Date];

結果を生成します。

CLIENT  ACCOUNT PAID    DATE
1   Stack   123 January, 01 2013 00:00:00+0000
1   Stack   234 January, 02 2013 00:00:00+0000
1   Stack   33  January, 03 2013 00:00:00+0000
2   Over    674 January, 04 2013 00:00:00+0000
2   Over    2424    January, 05 2013 00:00:00+0000
2   Over    4545    January, 06 2013 00:00:00+0000
3   Flow    22  January, 07 2013 00:00:00+0000
3   Flow    3456    January, 08 2013 00:00:00+0000
3   Flow    445 January, 09 2013 00:00:00+0000

クライアントが多くのアカウントを持っている可能性があり、特定の日付に最大の支払額を持つクライアントアカウントを見つけたい場合、もっと複雑なことをしなければなりません:

select *
from Customer c2, Data d2, 
(
select d.[Client],
max([Paid])as 'PAID', 
d.[Date] 
from Customer c, 
Data d 
where
d.[Client] = c.[Client] group by d.[Client],d.[Date]
) subQ
where c2.[client] = d2.[client] and
c2.[client] = subQ.[client] and
d2.[Paid] = subQ.[Paid] and
d2.[Date] = subQ.[Date];

グループ化されていない列をクエリに追加することはできないため、次を参照してください

于 2013-04-12T08:52:06.397 に答える