データベースは、HPのVertica 7やPostgreSQL 9.最後の1日に使用する支払用カードSQL結合をウィンドウ関数に書き換える方法は?
create table test (
id int,
card_id int,
tran_dt date,
amount int
);
insert into test values (1, 1, '2017-07-06', 10);
insert into test values (2, 1, '2017-06-01', 20);
insert into test values (3, 1, '2017-05-01', 30);
insert into test values (4, 1, '2017-04-01', 40);
insert into test values (5, 2, '2017-07-04', 10);
、最後の90日間でそのカードに課金上限額が何であるかです。
select t.card_id, max(t2.amount) max
from test t
join test t2 on t2.card_id=t.card_id and t2.tran_dt>='2017-04-06'
where t.tran_dt>='2017-07-06'
group by t.card_id
order by t.card_id;
結果は、私は、SQLウィンドウ関数に問合せをリライトしたい
card_id max
------- ---
1 30
正しいです。
select card_id, max(amount) over(partition by card_id order by tran_dt range between '60 days' preceding and current row) max
from test
where card_id in (select card_id from test where tran_dt>='2017-07-06')
order by card_id;
結果セットは一致しません。どうすればできますか?ここ
テストデータ: http://sqlfiddle.com/#!17/db317/1
はまず、PostgresのとのVerticaは、2つの非常に異なるものです。第2に、なぜ2つの非常に異なるクエリの結果が同じであると期待していますか? – mustaccio