如果今天的结果为空白,请显示昨天的总数

时间:2019-09-13 20:19:07

标签: postgresql

我的代码是一段时间内的累计收入。如果一天是空白(当天没有收入),则需要它来显示前一天的总计。 CASE WHEN(今天为空白),昨天的数据ELSE今天的总数

我不确定这是什么语法。

select distinct
 date_trunc('day',admit_date) as admit_date,
 revenue,
 sum(revenue) over(order by admit_date) as running_rev
 from dailyrev
 order by admit_date 

预期结果:

Day 1: $100
Day 2: $200
Day 3: (no data so show Day 2 data) $200

2 个答案:

答案 0 :(得分:0)

也许这就是您需要的:

"dependencies": {
    "core": "git+ssh://git@ourdomain.com:2999/coredependency#master",
    "intelligence": "git+ssh://git@ourdomain.com:2999/dependency2.git#feature/jk-1212",
    "notifications": "git+ssh://git@ourdomain.com:2999/dependency3.git#master",
    "social": "git+ssh://git@git.ccmteam.com:2999/cdependency4#develop",
    "gulp-cli": "2.0.1",

不幸的是,PostgreSQL还不支持SELECT admit_date, prev_revs[cardinality(prev_revs)] AS adj_revenue, sum(prev_revs[cardinality(prev_revs)]) OVER (ORDER BY admit_date) AS running_sum FROM (SELECT date_trunc('day', admit_date) AS admit_date, array_remove(array_agg(revenue) OVER (order by admit_date), NULL) AS prev_revs FROM dailyrev) AS q ORDER BY admit_date; 子句,所以它会更简单。

答案 1 :(得分:0)

我不确定这是否是您想要的,但是请尝试以下操作:

SELECT
    gs.date::date AS admit_date,
    (SELECT revenue FROM dailyrev WHERE admit_date::date = gs.date) AS revenue,
    (SELECT SUM(revenue) FROM dailyrev WHERE admit_date::date <= gs.date) AS accumulated_total
FROM
    generated_series(
        (SELECT MIN(admit_date::date) FROM dailyrev),
        (SELECT MAX(admit_date::date) FROM dailyrev),
        INTERVAL '1 day'
    ) gs
ORDER BY gs.date::date;

是的,看起来并不好,但是..