在PostgreSQL中查询不同产品的开闭数量

时间:2018-09-19 04:37:32

标签: sql postgresql

我正在尝试在PostgreSQL查询中为不同产品的单独开盘和收盘设置开盘价和开盘价,在此输入特定的日期范围,并且我的第一行的开盘价应以开始日期为准,而开盘价应为(开盘价+第一栏+第2列+第3列)。

***这是我的示例数据库

Date1        Product    column1  column2   column3
01/01/2017   A          25       15        20
02/01/2017   C          10       20        20
03/01/2017   B          10       10        20
04/01/2017   C          10       10        20
05/01/2017   A          10       20        10
05/01/2017   C          5        10        20
06/01/2017   B          10       10        20
06/01/2017   A          10       10        20
06/01/2017   C          10       10        20

我在PostgreSQL中的预期查询*日期范围是2017年4月1日至2017年6月1日:

Date1         Product      opening  column1  column2  column3 closing
04/01/2017    C            50       10       10       20      90
05/01/2017    A            60       10       20       10      100
              C            90       5        10       20      125
06/01/2017    A            100      10       10       20      140
              B            40       10       10       20      80
              C            125      10       10       20      165

1 个答案:

答案 0 :(得分:0)

我有一个建议,但这是在SQL Server中,我不熟悉Postresql。 您可以通过任何适合u-

的循环或游标将日期范围作为@trans_date传递给它,从而运行以下查询

SELECT日期1,产品,SUM(opening.opn_qty)作为AS开头,SUM(column1)作为AS列,SUM(column2)AS列,SUM(column3)作为AS列,3,SUM(closes.cls_qty)作为AS 来自sample_table1      左外连接 (     SELECT(SUM(column1)+ SUM(column2)+ SUM(column3))AS opn_qty,           产品     来自sample_table1     日期1 <@trans_date     按产品分组              日期1 )打开ON打开.Product = sample_table1.Product      左外连接 (     SELECT(SUM(column1)+ SUM(column2)+ SUM(column3))AS cls_qty,           产品     来自sample_table1     日期1 <= @trans_date     按产品分组              日期1 )在打开时关闭.Product = sample_table1.catalog_item_id 在哪里sample_table1.Date1 = @trans_date GROUP BY sample_table1.Product,          日期1 ORDER BY Date1 DESC;

可以在PostgreSQL中应用的类似逻辑。