-1

30 日間の合計注文数とユニーク顧客数を取得しようとしています。

私はこのテーブルを持っています:

order_id、order_date、order_country、customer_id。

(1, '2021/03/04', 'SWE', 1),
(2, '2021/03/01', 'SWE', 1),
(3, '2021/03/01', 'DK', 3),
(4, '2021/03/01', 'DK', 3),
(5, '2021/03/03', 'NOR', 2),
(6, '2021/02/27', 'DK', 3),
(7, '2020/12/30', 'Ger', 4);

私はこのようなことを試しました:

SELECT order_date
     , COUNT(order_id) as orderAmount
     , COUNT(distinct customer_id) as customerAmount 
  FROM orders
 WHERE order_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW() 
 GROUP 
    BY order_date

これは、私が望む日付ごとの注文の合計額を取得します。ただし、毎月ではなく、日付ごとの一意の顧客のみをカウントするため、同じ顧客が複数回表示されます。この sql スクリプトの小さなバリエーションを試しましたが、うまく動作しません。

4

2 に答える 2

0

顧客が最初に現れた時間を数えるだけです。

SELECT order_date, COUNT(*) as num_orders,
       COUNT(DISTINCT customer_id) as distinct_customers_on_day,
       SUM(SUM(seqnum = 1)) OVER (ORDER BY order_date) as running_distinct_customers
FROM (SELECT o.*, 
             ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date) as seqnum
      FROM orders o
      WHERE o.order_date BETWEEN NOW() - INTERVAL 30 DAY AND NOW() 
     ) o
GROUP BY order_date;

ここに db<> フィドルがあります。

于 2021-03-07T13:31:49.303 に答える