PostrgreSQL计算最近7天有多少笔交易

时间:2019-12-13 14:23:32

标签: sql postgresql

嗨,我是一名SQL noobie,已经连续数小时致力于解决此问题。

我有一个交易表,字段txnDate是日期数据类型。我已经更改了表格,以添加名为txnLast7days的列,该列应该计算txnDate的最后7天内表中存在多少交易。

这是my table

我可以使用哪种语句一次更新所有表记录,并基于txnDate计算7天之内的交易次数,并将结果插入每行的txnLast7days列中?

这是我根据建议正在使用的语句,但是我仍然没有得到正确的结果。

UPDATE temp2
SET txnLast7Days = subquery.txnLast7Days
FROM
    (       
        SELECT  txnDate, sum(dateCounts.transactionCount) OVER (ORDER BY txnDate ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) as txnLast7Days
        FROM (SELECT count(*) transactionCount, txnDate FROM temp2 GROUP BY txnDate) as dateCounts
    ) subquery
WHERE temp2.txnDate = subquery.txnDate

我当前的查询未使用正确的计数更新txnlast7days,如您在此处看到的 my current query output

1 个答案:

答案 0 :(得分:0)

您需要做的是获得每个txnDate的计数,然后获得每个txnDate的7天滚动计数。

前者是在您的桌子上使用简单的COUNT(*)GROUP BY完成的。后者是通过窗口函数完成的,该函数可以回顾按txnDate排序的最后7条记录,并对这些计数求和。

然后您可以在UPDATE查询中使用这些结果来填充新列。

UPDATE yourtable
SET txnLast7Days = subquery.txnLast7Days
FROM
    (       
        SELECT  txnDate, sum(dateCounts.transactionCount) OVER (ORDER BY txnDate ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) as txnLast7Days
        FROM (SELECT count(*) transactionCount, txnDate FROM yourtable GROUP BY txnDate) as dateCounts
    ) subquery
WHERE txnDate = subquery.txnDate