按日期累计金额

时间:2015-12-21 11:03:38

标签: sql google-bigquery klipfolio

我们有一个表格,其中包含按日期计算的累计金额值,例如:

|       date.      |          |

| 2015-03-01 | 1.23 |

| 2015-03-04 | 1.98 |

| 2015-03-06 | 2.23 |

And we have a table with all dates we need, for instance:

|       date.      |

| 2015-03-01 |

| 2015-03-02 |

| 2015-03-03 |

| 2015-03-04 |

| 2015-03-05 |

| 2015-03-06 |

We would like to get:

|       date.      |          |

| 2015-03-01 | 1.23 |

| 2015-03-02 | 1.23 |

| 2015-03-03 | 1.23 |

| 2015-03-04 | 1.98 |

| 2015-03-05 | 1.98 |

| 2015-03-06 | 2.23 |

这可能只是使用SQL本身吗?

我正在努力想办法解决这个问题。

我尝试了一些交叉连接操作,但没有成功。

由于

2 个答案:

答案 0 :(得分:4)

SELECT 
  [date],
  amount
FROM (
  SELECT
    [date],
    amount,
    ROW_NUMBER() OVER(PARTITION BY [date] ORDER BY delta) AS win
  FROM (  
    SELECT 
      dates_table.date AS [date],
      DATEDIFF(TIMESTAMP(dates_table.date), TIMESTAMP(amounts_table.date)) AS delta,
      amount
    FROM amounts_table CROSS JOIN dates_table
    WHERE DATEDIFF(TIMESTAMP(dates_table.date), TIMESTAMP(amounts_table.date)) >= 0
  )
)
WHERE win = 1
ORDER BY 1

答案 1 :(得分:2)

我意识到 - 在这种特殊情况下,它应该更简单(更简单) 请尝试以下

SELECT 
  dates_table.date,
  MAX(amounts.amount) OVER(ORDER BY dates_table.date) AS amount
FROM dates_table LEFT JOIN amounts_table
ON dates_table.date  = amounts_table.date
  

你们中的一些人在采纳这个答案并思考它时遇到了问题   不起作用 - 我刚刚将以下示例添加到"证明"以上是有效的   :O)

SELECT    
  dates.date,   
  MAX(amounts.amount) OVER(ORDER BY dates.date) AS amount 
FROM (   
  SELECT * FROM      
    (SELECT '2015-03-01' AS [date]),     
    (SELECT '2015-03-02' AS [date]),     
    (SELECT '2015-03-03' AS [date]),     
    (SELECT '2015-03-04' AS [date]),     
    (SELECT '2015-03-05' AS [date]),     
    (SELECT '2015-03-06' AS [date])   
) AS dates 
LEFT JOIN (  
  SELECT * FROM     
    (SELECT '2015-03-01' AS [date],  1.23 AS amount),     
    (SELECT '2015-03-04' AS [date], 1.98 AS amount),      
    (SELECT '2015-03-06' AS [date], 2.23 AS amount) 
) AS amounts 
ON dates.date  = amounts.date 

结果是:

Row dates_date  amount   
1   2015-03-01  1.23     
2   2015-03-02  1.23     
3   2015-03-03  1.23     
4   2015-03-04  1.98     
5   2015-03-05  1.98     
6   2015-03-06  2.23
相关问题