2017-03-20 5 views
0

私は注文とラインテーブルを持っています。各商品の日付ごとの予約はいくつですか?

注文には1行以上の行を付けることができます。
ラインリファレンス製品(購入品)、date_at(あなたがチケットを考えることができる。あなたはこのチケットを使用することができます日付)

create table o (
id integer NOT NULL 
); 


CREATE TABLE line (
    id integer NOT NULL, 
    order_id integer NOT NULL, 
    product_id integer NOT NULL, 
    date_at date, 
    time_at time, 
); 

私は日付ごと持っているどのように多くのbookings/reservationsを探しています。 私は今、私は各製品の結果を希望する各日付

select date(t3.date_at), count(*) 
from (
    select t1.id, date(t2.date_at) as date_at, count(*) 
    from o t1 
     inner join line t2 on t1.id = t2.order_id 
    group by t1.id, date(t2.date_at)) t3 
group by date(t3.date_at); 

ため(date_at, count)のリストを取得することができます。

つまり、それぞれのproduct_idが必要です。商品を含む注文(少なくとも1行にproduct_idが含まれている注文)の(date, count)のリストを取得したいと考えています。

私は別の{product_id}でループで次のクエリを実行できますが、私はpostgresのを使用しています良い方法

select date(t3.date_at), count(*) 
from (
    select t1.id, date(t2.date_at) as date_at, count(*) 
    from o t1 
     inner join line t2 on t1.id = t2.order_id 
    where t2.product_id={product_id} 
    group by t1.id, date(t2.date_at)) t3 
group by date(t3.date_at); 

があるかもしれませんね。


テストデータ

insert into o(id) 
values 
(1); 

insert into o(id) 
values 
(2); 

insert into o(id) 
values 
(3); 


insert into line (id, order_id, product_id, date_at) 
    values 
    (1, 1, 1, '2017-1-1'); 
insert into line (id, order_id, product_id, date_at) 
    values 
    (2, 1, 1, '2017-1-1'); 
insert into line (id, order_id, product_id, date_at) 
    values 
    (7, 1, 1, '2017-1-1'); 
insert into line (id, order_id, product_id, date_at) 
    values 
    (8, 2, 1, '2017-1-1'); 
insert into line (id, order_id, product_id, date_at) 
    values 
    (5, 2, 2, '2017-1-1'); 
insert into line (id, order_id, product_id, date_at) 
    values 
    (6, 1, 2, '2017-1-1'); 

insert into line (id, order_id, product_id, date_at) 
    values 
    (4, 1, 1, '2017-1-3'); 
insert into line (id, order_id, product_id, date_at) 
    values 
    (3, 3, 2, '2017-1-2'); 

私はあなたがしたい場合は、私は一度だけ詳細..

select date(t3.date_at), t3.product_id, count(*) 
from (
    select t1.id, t2.date_at as date_at, t2.product_id as product_id, count(*) as c 
    from o t1 
     inner join line t2 on t1.id = t2.order_id 
    group by t1.id, t2.product_id, date(t2.date_at)) t3 
group by t3.product_id, t3.date_at; 

答えて

0

によってグループに必要だと思う:各製品について、各日付のために、カウントをその製品の少なくとも1つのインスタンスを含む一意の/別個の注文の数であれば、次のように十分でなければなりません。

select product_id, date_at, count(distinct order_id) 
from line 
group by product_id, date_at 
order by product_id, date_at; 
+0

うわー、これはうまくいくように思えます。 – eugene

関連する問題