首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL SELECT语句按不同标准滚动5,10天

SQL SELECT语句按不同标准滚动5,10天
EN

Stack Overflow用户
提问于 2021-04-13 04:44:44
回答 1查看 51关注 0票数 0

我正在使用SELECT postgres语句来创建具有特定条件的item_.amount列的滚动和。我希望滚动和字段具有以下标准。5天,卖出,A项10天,买,B 10天,卖出

我所做的工作如下:

首先,在数据库中,我有两个表:一个带有item_事务的表,一个带有日期字段的表。https://dbfiddle.uk/?rdbms=postgres_13&fiddle=80fcb5654ead862f7b057c76425e91ca

我已经把桌子合并到

代码语言:javascript
复制
select date_actual,transaction_date 
FROM date LEFT JOIN item_ ON item_.transaction_date=date.date_actual
ORDER BY date.date_actual DESC

我解释滚动栏(5天或10天)下面。我还需要考虑"A/B“的item_name和”买卖“的transaction_type。

例如,2021-4-10行的Rolling_A_sell_5day是76。76 + 0 +0+0+0上面的计算不包括94,因为它正在寻找"A“和"sell”列,所以它只包括76行,其余的行是0。

同样,对于第2021-4-10行中的Rolling_buy_10day也是94.0+0+0+ 94 +0+0+0+0+0+0+0

对于输出映像表,我尝试创建这样的SQL语句,但我不知道如何继续。

代码语言:javascript
复制
    SELECT 
      t1.Id
     ,t1.transaction_date
     ,t1.amount
     ,SUM(t2.amount) as Rolling10DayQt
   FROM item_ t1
      CROSS JOIN(
          SELECT *
          FROM item_ a
          WHERE a.id=t1.Id 
             AND (a.transaction_date > DATEADD(DAY,-10,t1.transaction_date) AND a.transaction_date <= t1.transaction_date) ) t2
   GROUP BY t1.Id ,t1.transaction_date ,t1.amount

输出表应该如下所示:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-29 03:21:04

我通过以下窗口语句和语句之间的范围解决了这个问题:

代码语言:javascript
复制
                                 SUM((SELECT quantity as B_alloc
                              WHERE item_name='B')) OVER (
                                 ORDER by date.date_actual 
                                 RANGE BETWEEN unbounded PRECEDING AND CURRENT ROW
                             ) as CUM_inv_B,

https://dbfiddle.uk/?rdbms=postgres_13&fiddle=c270837503bc96aa790d169bbe87d2bb

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67068862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档