簡體   English   中英

大查詢/sql 在同一列中維護從下一行開始的相同數據,根據當前行中的某些條件獲取

[英]Big query/sql to maintain the same data from next row onwards in the same column itself, got based on some condition in the current row

我正在處理一個用例,我需要在其中實現一種邏輯來獲取相關數據。

例如:如果您將看到圖像:

該列 = new_TARIFF_ALLOWANCE_DATA 計算為

case when gift_given!=0 or gift_received!=0 then TARIFF_ALLOWANCE_DATA - gift_given + gift_received else remain same whatever it is as per last row calculation from next row onwards '作為new_total_allwance

所以基本上我想要在同一列中基於條件無論我得到什么都會在同一列中從下一行開始保持相同的值

在此處輸入圖像描述

我嘗試了 if (current_row = previous_row then previous_row, current_row) 方法但沒有用。

一種使用導航函數從gift_givengift_taken獲取最后填充值的方法:

WITH calc_last_gifts AS (
  SELECT 
    *,
    LAST_VALUE(NULLIF(gift_given, 0) IGNORE NULLS) OVER (ORDER BY row_no ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as last_gift_given,
    LAST_VALUE(NULLIF(gift_taken, 0) IGNORE NULLS) OVER (ORDER BY row_no ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) as last_gift_taken,
  FROM sample
)
SELECT 
  * EXCEPT(last_gift_given, last_gift_taken),
  tarif_allowance_data - IFNULL(last_gift_given, 0) + IFNULL(last_gift_taken, 0) as new_tarif_allowance_data
FROM calc_last_gifts

Output: 預期產出

有關LAST_VALUE導航 function 的更多信息: https://cloud.google.com/bigquery/docs/reference/standard-sql/navigation_functions#last_value

暫無
暫無

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

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