1

次のようなテーブルがあるとします。

ID | 日付 | 顧客 | セール

そして、顧客ごとに次を選択します。

  • 購入数
  • 前回の購入額
  • 正の値の場合の合計購入金額

このテーブル定義では:

CREATE TABLE sales (
    id int auto_increment primary key, 
    dates date,
    customer int,
    sale int
);

そして、このデータ:

INSERT INTO sales
    (dates, customer, sale)
VALUES
    ('2012-01-01', 1, 2),
    ('2012-02-01', 1, 8),
    ('2012-03-01', 2, 1),
    ('2012-04-01', 2, 7),
    ('2012-05-01', 2, -5),
    ('2012-06-01', 1, 5)

私の結果は次のようになります。

顧客 | 販売 | last_sale
1 3 5
2 3 7

入手方法がわかりません。私はこれに達しました:

SELECT s.customer, COUNT(s.sale) total_sales, last_sale FROM sales AS s
JOIN
  (SELECT customer, sale last_sale FROM sales GROUP BY customer ORDER BY dates DESC) AS t
  ON t.customer=s.customer
GROUP BY s.customer

しかし、それは機能していません。このデータを取得する方法のアイデアはありますか?

すべてのコードはSQL フィドルにあります

4

2 に答える 2

3

これを試して

SELECT a.customer, count(a.sale), max_sale
FROM sales a
INNER JOIN (SELECT customer, sale max_sale 
            from sales x where dates = (select max(dates) 
                                        from sales y 
                                        where x.customer = y.customer
                                        and y.sale > 0
                                       )

           )b
ON a.customer = b.customer
GROUP BY a.customer, max_sale;

SQLデモ

于 2013-02-19T15:59:06.103 に答える
1
SELECT a.customer, 
       COUNT(a.sale) total_sales,
       c.sale
FROM   sales a
       INNER JOIN
        (
          SELECT  a.*
          FROM    sales a
                  INNER JOIN
                  (
                    SELECT  Customer, MAX(Dates) max_date
                    FROM    sales
                    WHERE   sale > 0
                    GROUP   BY Customer
                  ) b ON a.customer = b.customer AND
                          a.dates = b.max_date
        ) c ON a.customer = c.customer
GROUP  BY a.customer, c.sale
于 2013-02-19T15:59:59.490 に答える