比较同一表POSTGRESQL中当前日期和昨天的值

tjjdgumg  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(2)|浏览(191)

我有一张这样的table:
| 产物|价值|trx日期|
| - -----|- -----|- -----|
| 苹果|一百|2020-06-01 2020-06-01|
| 苹果|三百|2020-06-02 2020-06-02|
| 苹果|五百|2020-06-03 2020-06-03|
我需要创建这样的报告(假设今天是2020-06-03)
| 产物|昨天|当前日期|三角洲|
| - -----|- -----|- -----|- -----|
| 苹果|三百|五百|两百|
我很困惑如何创建一个查询(PostgreSQL),比较这些值。Fyi,我总是每天更新这个表。我尝试使用('1 day'::interval)查询,但它总是显示2020-06-03之前的所有日期,即2020-06-01和2020-06-02。

uidvcgyl

uidvcgyl1#

使用Window Function超前或滞后将数据从后续行(超前)或前一行(滞后)“合并”到当前行。在这种情况下,我使用滞后函数来获得“昨天”的值。

select product, yesterday,  today, today-yesterday delta
  from ( select p.product, p.value today 
              , lag(value) over (partition by p.product 
                                     order by p.trx_date) yesterday
              , p.trx_date
          from products p
       ) d
 where trx_date = '2020-06-03'::date ;
4zcjmb1e

4zcjmb1e2#

使用CTE:
https://www.postgresql.org/docs/12/queries-with.html
举个例子:

CREATE TABLE product_table (product varchar, value integer, trx_date date);
INSERT INTO product_table values ('apple', 100, '06/01/2020'), ('apple', 300, '06/02/2020'), ('apple', 500, '06/03/2020');

WITH prev AS (
    SELECT
        product,
        value
    FROM
        product_table
    WHERE
        trx_date = '06/03/2020'::date - '1 day'::interval
)
SELECT
    pt.product,
    prev.value AS yesterday,
    pt.value AS CURRENT_DATE,
    pt.value - prev.value AS delta
FROM
    product_table AS pt,
    prev
WHERE
    trx_date = '06/03/2020';

 product | yesterday | current_date | delta 
---------+-----------+--------------+-------
 apple   |       300 |          500 |   200

相关问题