BigQuery 加入和填补空白

时间:2021-03-11 19:12:15

标签: join google-bigquery

我有以下数据集要合并,但我正在尝试填充空行。

SELECT Name, Surname,IFNULL((
    SELECT SUM(AmountTaken) FROM takenfrom WHERE UserID = users.UserID
), 0) - IFNULL((
    SELECT SUM(AmountPaid) FROM paid WHERE UserID = users.UserID
), 0) AS MustPay
FROM users

结果

enter image description here

我将如何为两家公司复制 2021-01-02 行 2021-01-03 的结果。基本上填充空行,直到新的更新值发挥作用。 另外,我将如何指定在 2021-01-01 获得公司 xzy。 谢谢。

1 个答案:

答案 0 :(得分:2)

下面应该做

WITH data1 as (
  SELECT "2021-01-01" date, 'abc' company, 3 cumulative_count UNION ALL
  SELECT "2021-01-02" date, 'abc' company, 4 cumulative_count UNION ALL
  SELECT "2021-01-06" date, 'abc' company, 17 cumulative_count UNION ALL
  SELECT "2021-01-02" date , 'xzy' company, 2 cumulative_count UNION ALL
  SELECT "2021-01-04" date , 'xzy' company, 16 cumulative_count UNION ALL
  SELECT "2021-01-08" date , 'xzy' company, 16 cumulative_count
), data_dates as (
    # SELECT * 
    # FROM UNNEST(GENERATE_DATE_ARRAY('2021-01-01', '2021-01-08',INTERVAL 1 DAY)) AS date
    SELECT "2021-01-01" date UNION ALL
    SELECT "2021-01-02" date UNION ALL
    SELECT "2021-01-03" date UNION ALL
    SELECT "2021-01-04" date UNION ALL
    SELECT "2021-01-05" date UNION ALL
    SELECT "2021-01-06" date UNION ALL
    SELECT "2021-01-07" date UNION ALL
    SELECT "2021-01-08" date
), data_companies as (
    SELECT DISTINCT company
    FROM data1
) 
SELECT 
  a.date,
  c.company,
  IFNULL(cumulative_count, LAST_VALUE(cumulative_count IGNORE NULLS) OVER(PARTITION BY c.company ORDER BY a.date)) cumulative_count      
FROM data_dates as a, data_companies as c
LEFT JOIN data1 as b
ON a.date = b.date 
AND c.company = b.company
ORDER BY date, company    

带输出

enter image description here

相关问题