2017-03-20 7 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 
); 

私は日付ごと持っているどのように多くの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); 

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

+0

なぜ注文日を 'line'テーブルに入れるのですか?また、使用しているデータベースで質問にタグを付けてください。 –

+0

日付ごとの注文数を取得するには注文IDでグループ化しないでください – Lamak

+0

@GordonLinoff注文書を編集しました。注文日ではなく、商品に関連付けられた日付です。 – eugene

答えて

2

クエリが複雑すぎるようです。私はこれが何をしたいんだと思う:

select product_id, date(date_at), count(*) as cnt 
from line l 
group by product_id, date(date_at) 
order by product_id, date(date_at); 

製品はオーダー内の複数の行に表示できる場合は、使用します。

select product_id, date(date_at), count(distinct order_id) as cnt 
from line l 
group by product_id, date(date_at) 
order by product_id, date(date_at); 

あなたも戻っordersからjoinする必要はありません。私は、の日付を持つことが、linesにあるよりも(私にとって)より意味があることを指摘します。

+0

私の悪い、私はdate_atが何を意味するか説明しなければならなかった..私はそれを説明するためにopを編集した。注文のものではなく、商品の属性です。 date_atは、製品を使用できる日付を指定します。それは '予約された日付'です。 – eugene

+0

ああ、あなたは私の質問を誤解しました、私のopをもう一度見てください... – eugene

関連する問題