2017-03-09 5 views
0

次の図に示すように、ネイティブSQLクエリを使用して結果を取得しようとしましたが、SQLのみを使用してこの結果を得る方法がないかどうかは現在わかりません。特定の結果のSQL使用数または合計

私はこのクエリの周りだったが、現在はさらにないアイデア:

CREATE TABLE receipts 
(
receipt_id int primary key, 
client_code varchar not null, 
create_date date not null 
); 

insert into receipts (receipt_id, client_code, create_date) values (1, 'fx90', to_date('2016/01/11', 'yyyy/MM/dd')); 
insert into receipts (receipt_id, client_code, create_date) values (2, 'fx90', to_date('2016/02/12', 'yyyy/MM/dd')); 
insert into receipts (receipt_id, client_code, create_date) values (3, 'fx90', to_date('2016/02/20', 'yyyy/MM/dd')); 
insert into receipts (receipt_id, client_code, create_date) values (4, 'fx90', to_date('2016/03/11', 'yyyy/MM/dd')); 
insert into receipts (receipt_id, client_code, create_date) values (5, 'fx90', to_date('2016/03/12', 'yyyy/MM/dd')); 
insert into receipts (receipt_id, client_code, create_date) values (6, 'fx90', to_date('2016/03/19', 'yyyy/MM/dd')); 

sample result with params

+0

が見えます。 'DATE_TRUNC'は有効なMySQL関数ではないので、なぜこの質問にmysqlが付いているのかは不明です。 – spencer7593

+0

true - mysqlタグが削除されました – PDS

答えて

1

:あなたは、各行に "実行中の合計" を追加したいよう

SELECT clientCode, monthYear, receipts, 
     sum(receipts) over(order by monthYear) as total 
    FROM (
    SELECT receipts.client_code clientCode, 
      date_trunc('MON', receipts.create_date) monthYear, 
      COUNT(1) receipts 
     FROM receipts 
     GROUP BY receipts.client_code, monthYear 
) X 
ORDER BY monthYear 
+0

これは私が探していたものです - あなたは何が使われているのか教えてくれませんか() – PDS

+0

@PDave 'NOT NULL値を数える' count()。 '1'はヌルではありません:)' count(1) 'は' count(date_trunc( 'MON'、receipts.create_date)) 'と同じですが、 – Mike

2

を引き起こす:

SELECT 
    receipts.client_code clientCode, 
    date_trunc('MON', receipts.create_date) monthYear, 
    COUNT(date_trunc('MON', receipts.create_date)) receipts, 
    subReceipts.total total 
    FROM receipts 
    LEFT JOIN (SELECT 
     receipts.client_code clientCode, 
     date_trunc('MON', receipts.create_date) monthYear, 
     COUNT(date_trunc('MON', receipts.create_date)) total 
     FROM receipts 

     GROUP BY 
     receipts.client_code, 
     date_trunc('MON' ,receipts.create_date) 
     ORDER BY 
     date_trunc('MON' ,receipts.create_date) 
    ) subReceipts ON subReceipts.clientCode = receipts.client_code 
    GROUP BY 
    receipts.client_code, 
    date_trunc('MON' ,receipts.create_date), 
    subReceipts.total 
    ORDER BY 
    date_trunc('MON' ,receipts.create_date) 

サンプルSQLデータとdbテーブルは、スクリプトを作成しませんmysqlを仮定すると、次のようになります。

PostgreSQLの
set @running_total := 0; 
SELECT 
    client_code, 
    CONCAT(MONTH(create_date), ' - ', YEAR(create_date)) as month_year, 
    COUNT(receipt_id) AS receipts_month, 
    (@running_total := @running_total + COUNT(receipt_id)) as total_receipts 
FROM receipts 
GROUP BY client_code, MONTH(create_date), YEAR(create_date) 
ORDER BY receipt_id; 
関連する問題