2016-04-09 15 views
-1

がサポートされていない場合、同じ結果を達成するためにどのように私は2つのテーブルを持っています。それは3列を含んでいます。 uuid、user_id、occur_at相関サブクエリが

購入:この​​表には、ユーザーが行ったすべての購入が含まれています。これは、3列が含まれていますpurchase_id、USER_ID、purchased_at

質問:

for session in sessions: 
    current_session_user_id = session["user_id"] 
    current_session_timestamp = session["occurred_at"] 
    num_purchases_made_at_the_time = query(
     SELECT count(*) FROM purchases 
     WHERE 
      purchases.user_id = current_session_user_id 
      AND purchases.purchased_at < current_session_timestamp 
    ) 

:各セッションのために、番号を見つけるには、ユーザーが既にセッション

擬似コードの時に作った購入します注意:非平等相関副問合せ式は、私のデータベースではサポートされていません(のVertica)

いくつかのアイデアを、私は相関サブクエリを使用することはできませんですので:

  1. ユーザーごとに注文数が発生したときにインデックスを作成して参加するCTEを作成します。 ()

答えて

0

CTEを共通テーブル式または... CTEを条件付きTrueイベントとして使用していましたか? :-)

お持ちの場合:

SQL> select * from sessions order by uuid; 
uuid | user_id |  occurred_at  
------+---------+--------------------- 
    1 |  100 | 1959-03-07 04:31:15 
    2 |  100 | 1969-03-07 05:31:15 
    3 |  200 | 1979-03-07 06:31:15 
    4 |  200 | 1989-03-07 07:31:15 
    5 |  300 | 1999-03-07 08:31:15 

と:次に

SQL> select * from purchases order by purchase_id; 
purchase_id | user_id | purchased_at  
-------------+---------+--------------------- 
     1000 |  100 | 1959-03-07 04:32:15 
     1001 |  100 | 1959-03-07 04:33:15 
     1002 |  100 | 1969-03-07 05:32:15 
     1003 |  200 | 1979-03-07 06:32:15 
     1004 |  300 | 1999-03-07 08:32:15 

SQL> select max(a.user_id) as user_id, a.occurred_at, max(a.cte) as num_purchases 
    from (select s.user_id, s.occurred_at, 
        conditional_true_event(purchased_at < occurred_at) 
        over(partition by s.user_id order by s.occurred_at) as cte 
      from purchases p inner join sessions s 
       on p.user_id = s.user_id 
    ) a 
    group by a.occurred_at 
    order by 1, 2; 
user_id |  occurred_at  | num_purchases 
---------+---------------------+--------------- 
    100 | 1959-03-07 04:31:15 |    0 
    100 | 1969-03-07 05:31:15 |    2 
    200 | 1979-03-07 06:31:15 |    0 
    200 | 1989-03-07 07:31:15 |    1 
    300 | 1999-03-07 08:31:15 |    0 
関連する問題