簡體   English   中英

Hive/SQL 如何訪問剛剛為前幾行計算的列的值?

[英]Hive/SQL How do you access the value of the column which you just computed for previous rows?

我有一個表uv_user_date看起來像這樣: 在此處輸入圖像描述

它基本上是一個user log in table ,顯示按 user_id 分區的累積登錄天數。 並且該列pre顯示用戶登錄記錄的最后登錄日期。

基於此我想計算每個用戶記錄的連續登錄天數。

答案應該是: 在此處輸入圖像描述 我的想法是:為了記錄

  • 如果(uv_date - pre = 1 天)
    • 那么連續登錄天數就是最后一次連續登錄天數+1
  • 別的
    • 1 但我無法訪問last consecutive login days數值。

該代碼將是:

SELECT *,
   if(pre = date_add(uv_date, -1), last(consecutive_days) + 1, 1) consecutive_days
FROM uv_user_date

有什么辦法可以得到last(consecutive_days)的值

首先找出日期差異

tbl1:
select *, 
       if(pre = NULL, 1, datediff(uv_date, pre)) as diff
  from your_table

那么每個user_id的累積差異和accumulative_uv_date之間的差異,你想用它作為排名

tbl2:
select *, 
sum(diff) over (partition by user_id order by uv_date rows between unbounded preceding and current) - accumulative_uv_date as rnk
   from tbl1

最后,計算連續的天數

select user_id, uv_date, rnk
row_number() over (partition by user_id, rnk order by uv_date) as consecutive_days
  from tbl2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM