2016-07-20 19 views
0

私はウィンドウ上でverticaとmin()ウィンドウ関数を使用しています。しかし、関数はいくつかのウィンドウでうまく動作するようですが、いくつかのウィンドウでは、同じウィンドウ内で異なるmin値を返しています。私は、これはいくつかのウィンドウのために正常に動作し、リターンがしかしmin()ウィンドウ関数が正常に動作しない - 同じウィンドウに対して異なる値を返す

visid_high visid_low visit_num date_time visit_page_num min_hotelinfo 
1000025785676989783 3541599610445607061 1 6/19/2016 8:54 2 2 
1000025785676989783 3541599610445607061 1 6/19/2016 8:55 4 2 
1000025785676989783 3541599610445607061 1 6/19/2016 8:55 5 2 

visid_high visid_low visit_num date_time visit_page_num min_hotelinfo 
1000334043872452151 13928857828543794490 1 6/19/2016 14:56 2 2 
1000334043872452151 13928857828543794490 1 6/19/2016 14:57 6 2 
1000334043872452151 13928857828543794490 1 6/19/2016 14:57 7 2 
1000334043872452151 13928857828543794490 2 6/19/2016 16:09 2 2 
10006241273945967252 17961652664059791311 1 6/19/2016 20:09 2 2 
10006241273945967252 17961652664059791311 1 6/19/2016 20:09 4 2 
10006241273945967252 17961652664059791311 1 6/19/2016 20:10 8 2 

以下のようになり

select visid_high, visid_low, visit_num, date_time, visit_page_num, 
     min(visit_page_num) over (partition by visid_high , visid_low , visit_num order by date_time) as min_hotelinfo 
from prd_omniture_hit_data_all where pagename='Hotel Info - Home' and date(Date_time)='2016-06-19' order by visid_high, visid_low, visit_num, date_time 

を見下ろす午前何がある、いくつかのウィンドウのために、それが適切に機能していない

visid_high visid_low visit_num date_time visit_page_num min_hotelinfo 
10007599756616641840 269931436307846555 2 6/19/2016 19:51 2 2 
10007599756616641840 269931436307846555 2 6/19/2016 19:52 3 2 
10007599756616641840 269931436307846555 2 6/19/2016 19:52 5 2 
10007599756616641840 269931436307846555 2 6/19/2016 19:53 7 2 
10007599756616641840 269931436307846555 2 6/19/2016 19:53 9 2 
10007599756616641840 269931436307846555 2 6/19/2016 19:53 10 **10** 

10009683770139214971 14890994612952617462 2 6/19/2016 8:03 5 5 
10009683770139214971 14890994612952617462 2 6/19/2016 8:03 7 **5** 
10009683770139214971 14890994612952617462 2 6/19/2016 8:09 26 **26** 
10009683770139214971 14890994612952617462 2 6/19/2016 8:12 28 26 
10009683770139214971 14890994612952617462 2 6/19/2016 8:13 30 26 
10009683770139214971 14890994612952617462 2 6/19/2016 8:14 32 26 
10009683770139214971 14890994612952617462 2 6/19/2016 8:15 36 26 
10009683770139214971 14890994612952617462 2 6/19/2016 8:17 40 26 


visid_high visid_low visit_num date_time visit_page_num min_hotelinfo 
10012413883034897266 8201606845758098188 1 6/19/2016 7:22 4 4 
10012413883034897266 8201606845758098188 1 6/19/2016 7:24 5 4 
10012413883034897266 8201606845758098188 1 6/19/2016 7:24 8 4 
10012413883034897266 8201606845758098188 1 6/19/2016 7:24 7 4 
10012413883034897266 8201606845758098188 1 6/19/2016 7:24 6 **4** 
10012413883034897266 8201606845758098188 1 6/19/2016 8:04 16 **16** 
10012413883034897266 8201606845758098188 1 6/19/2016 8:06 20 16 
10012413883034897266 8201606845758098188 1 6/19/2016 8:06 25 16 
10012413883034897266 8201606845758098188 1 6/19/2016 8:07 28 16 
10012413883034897266 8201606845758098188 1 6/19/2016 8:07 30 16 
+0

正確なバージョンのVerticaを実行していますか? 'select version();' – woot

+0

@ woot Vertica Analytic Database v7.2.3-0 – Teja

+0

なぜウィンドウ定義の 'order by'ですか?私はなぜあなたが最小を得るために「注文する」必要があるのか​​分からない。通常、ウィンドウ関数として使用される集合体の 'order by 'は、それを「実行中の集合体」に変換します。 'order by'を削除したときに動作すると期待されるように動作しますか? –

答えて

1

パーティショングループが適切になるようにウィンドウを注文します。

select visid_high, visid_low, visit_num, date_time, visit_page_num, 
     min(visit_page_num) over 
     (partition by visid_high, visid_low, visit_num 
      order by visid_high, visid_low, visit_num) as min_hotelinfo 
from prd_omniture_hit_data_all 
where pagename = 'Hotel Info - Home' 
and date(Date_time) = '2016-06-19' 
order by visid_high, visid_low, visit_num, date_time 

また、このようにDate_timeをキャストしたくない場合もあります。述語のキャストや関数を避ける方がよいので、データベースの最適化をより良いものにすることができます(そうではなく、より多くの機会を与えます)。

where Date_time >= '2016-06-19' and Date_time < '2016-06-20' 
関連する問題