私はデータベース内の顧客の接続ログテーブルを持っており、前の7日間に各顧客が行った接続数を毎日計算しています。私が使用しているソーステーブルは、出力が末尾のX日間のセッション数をカウントする
uuid, _date, total_connections_over_trailing_seven_days,
私は何回あの人、特定の顧客口座と、指定した日付のために見ることができるようにあるように私が欲しいもの
uuid, sessionuid, connection_timestamp
のスキーマを持っています過去7日(またはそれ以前)に接続しています。
私はこれを達成するために書かれているクエリが
SELECT
uuid,
connection_timestamp::date as _date,
COUNT(sessionuid) OVER (ORDER BY timestamp_session ROWS 6 PRECEDING) as trailing_seven_day_session_count
FROM connection_history_table
あるしかし、私はこのクエリを実行すると、私は、ユーザーごとに個別のラインとそれぞれの固有のための代わりに単一のレコードのソーステーブル内のすべてのconnection_timestampを取得しますconnection_timestamp :: date。さらに、trailing_seven_day_session_countの値は1から最大値7(ある日に少なくとも7つのセッションがある場合)に増加しますが、それ以降は増加しません。だから、私は特定の日にセッションの数を数えているようですが、最初の7セッションでのみです。
uuid _date trailing_seven_day_session_count
16398 2015-02-18 00:00:00 1
16398 2015-02-18 00:00:00 2
16398 2015-02-18 00:00:00 3
16398 2015-02-18 00:00:00 4
16398 2015-02-18 00:00:00 5
16398 2015-02-18 00:00:00 6
16398 2015-02-18 00:00:00 7
16398 2015-02-18 00:00:00 8
16398 2015-02-18 00:00:00 8
16398 2015-02-25 00:00:00 1
16398 2015-02-25 00:00:00 2
16398 2015-02-25 00:00:00 3
16398 2015-02-25 00:00:00 4
16398 2015-02-25 00:00:00 5
16398 2015-02-25 00:00:00 6
16398 2015-02-25 00:00:00 7
16398 2015-02-25 00:00:00 8
16398 2015-02-25 00:00:00 8
ここで私が間違っていることは私には分かりません。私はconnection_timestamp :: dateでパーティションを実行しようとしましたが、それはどちらも助けにはなりませんでした。私は基本的にはストローで握っている、とうまくいかない。
おかげで、 ブラッド
ええ、私はそのような何かをしようとしたが、それは前の6行の上にカウントされるため、それは私が欲しいものを非常に取得していない、と私は必ずしも日常の行を持っていません。私は、ユーザーが演奏した毎日の行しか持っていません。だから私はまったく別の解決策を考え出す必要があります。あなたの助けをありがとう。私はあなたのソリューションをupvoteし、私が実際に持っている問題ではなく、私が投稿した元の問題を解決するので、それを受け入れるつもりです。 : –
一度のショットでなければならないのでしょうか、それとも繰り返しクエリを実行できますか?一日一回ですか?毎日行うことができれば、あなたが望むものを得るためにconnection_timestamp> = sysdate-7のレコードだけを選択する内側のselectにwhere句を追加することができます。 – systemjack
null日を処理するjankyクエリが追加されました。 – systemjack