嗨,我是一名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
答案 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