2017-06-02 23 views
3

最後の請求書データに基づいてすべてのユーザーのデータを抽出する必要があります。ここではデータがあります:SQL - MAX値が適切な値に適合しない

CREATE TABLE bite 
    (`ACCOUNT` int, `ISSUEDATE` datetime, `REFERENCE` int, 
    `ID` int, `AMOUNT` decimal(10,2)) 
; 

INSERT INTO bite 
    (`ACCOUNT`, `ISSUEDATE`, `REFERENCE`, `ID`, `AMOUNT`) 
VALUES 
    (2947471, '2012-12-31 00:00:00', 0005632765, 11543487, 40.18), 
    (2947471, '2016-12-30 00:00:00', 0017945914, 36672073, 34.75), 
    (2947471, '2012-11-30 00:00:00', 0005448824, 11001690, 33.69), 
    (2947471, '2013-03-31 00:00:00', 0006316596, 12759258, 33.44), 
    (2956987, '2015-07-01 00:00:00', 0012754607, 26035486, 26.79), 
    (2956987, '2015-12-30 00:00:00', 0014371958, 29254616, 25.14), 
    (2947471, '2014-05-31 00:00:00', 0009478470, 19223669, 23.34), 
    (2947471, '2013-03-02 00:00:00', 0006177725, 12352924, 21.17), 
    (2956987, '2014-05-31 00:00:00', 0009504785, 19223632, 20.24), 
    (2947471, '2014-01-31 00:00:00', 0008753563, 17845265, 19.97), 
    (2947471, '2013-06-30 00:00:00', 0007174573, 14523560, 19.28), 
    (2947471, '2014-06-30 00:00:00', 0010048671, 20171164, 19.22), 
    (2947471, '2015-01-31 00:00:00', 0011793537, 23926223, 18.98), 
    (2947471, '2014-03-31 00:00:00', 0009215609, 18762696, 18.26), 
    (2947471, '2013-11-30 00:00:00', 0008394094, 16600223, 18.14), 
    (2947471, '2013-04-30 00:00:00', 0006818798, 13568161, 18.08), 
    (2956987, '2015-06-30 00:00:00', 0013061086, 26579781, 18.03), 
    (2956987, '2014-10-31 00:00:00', 0010942060, 22376155, 18), 
    (2947471, '2013-12-31 00:00:00', 0008440468, 17395187, 18), 
    (2947471, '2013-10-31 00:00:00', 0007958174, 16156026, 17.94), 
    (2947471, '2013-08-31 00:00:00', 0007585482, 15274737, 17.79), 
    (2947471, '2012-11-30 00:00:00', 0005632765, 11543487, 40.18), 
    (2947471, '2016-11-30 00:00:00', 0017945914, 36672073, 34.75), 
    (2947471, '2012-10-31 00:00:00', 0005448824, 11001690, 33.69), 
    (2947471, '2013-02-28 00:00:00', 0006316596, 12759258, 33.44), 
    (2956987, '2015-05-31 00:00:00', 0012754607, 26035486, 26.79), 
    (2956987, '2015-11-30 00:00:00', 0014371958, 29254616, 25.14) 
; 

そして、これはクエリです:

select account, max(issuedate) as "LAST INVOICE DATE", 
    reference,amount,round(avg(amount),2) as "AVERAGE AMOUNT" 
from bite 
group by account 

(ここではフィドルからも入手可能:http://sqlfiddle.com/#!9/5280b7/58/0

は、あなたが、私はすべてがすべてに関係していることがわかりますので、最大の日付ではなく、逆の場合もあります。最大の日付値に関連する列のすべてのレコードが必要です。私が間違っていることを教えてください。あなたがmax issuedateを取得subqueryを使用する必要があります最後issuedateからのデータだけを取得するために

+0

現在の出力と希望する出力のサンプルを提供できますか?私はあなたがしたいことをかなり得ていません。 –

+0

@Hexadectはい、アカウント番号でグループ化されています。アカウント番号は2つしかありません。私が得た出力は、リンクをたどったフィドルサイトで見ることができます。最大の日付の値は正確ですが、金額とそれ以外のものはすべてのアカウントの最大日付が来る行には関係ありません。 –

+0

テーブルにユニークなフィールドがありますか? 'id'は一意であると仮定できますか? – gaborsch

答えて

0

select account, 
     max(issuedate) as "LAST INVOICE DATE", 
     amount, 
     (select round(avg(b3.amount),2) 
      from bite b3 
     where b3.account = b.account) as "AVERAGE AMOUNT" 
    from bite b 
where b.issuedate = (select max(b2.issuedate) 
         from bite b2 
         where b2.account = b.account) 
group by account, issuedate 
+0

Hey Sorack、 ありがとうございますが、私は各請求書の最終請求書と平均金額が必要です。これらの金額はどちらも同じです。 –

+0

@IvoVancānsというのは、私たちが発行した結果をグループ化したので、合計量を得るために新しいサブクエリが必要になるでしょう。私はこのサブクエリで答えを編集します – Sorack

+0

@IvoVancānsdone – Sorack

0

私はコードがあなたを助けることができることを願っています。

with withbite 
as(
select row_number()over(partition by account order by issuedate desc) as line, 
     account, 
     issuedate, 
     reference, 
     amount 
from bite 
) 
select account, 
     issuedate as 'LAST INVOICE DATE', 
     reference, 
     amount, 
     round(avg(amount),2) as 'AVERAGE AMOUNT' 
from withbite 
where line=1 
group by account, 
     issuedate, 
     reference, 
     amount 
関連する問題