我有一个插入更新存储过程,其中从一个过程获取数据并在表中进行更新。
我的问题是我需要更新表中最近1年的每一天数据。
现在说,如果我需要昨天的数据,我需要在日期2daysprior之前的2天之前给我日期过滤器作为1daysprior ........................... 365daysprior
需要运行该程序365天,这需要付出巨大的努力
有什么办法可以一次运行它吗?
样本数据:
TrendStartDate TrendEndDate ToTalCalls AbnTime
2019-12-22 2019-12-22 42 0
2019-12-21 2019-12-21 464 1016
预期产量:
TrendStartDate TrendEndDate ToTalCalls AbnTime
2019-12-20 2019-12-22 42 0
2019-12-19 2019-12-21 464 1016
2019-12-18 2019-12-19 232 121
2019-12-17 2019-12-18 121 22
2019-12-16 2019-12-17 242 3
2019-12-15 2019-12-16 32 3
2019-12-14 2019-12-15 3221 1
2019-12-13 2019-12-14 11 1
这需要长达365天的时间
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要一次性运行并更新表中最近一年每一天的数据,你可以使用SQL的窗口函数或者递归查询来实现,但具体实现方式依赖于你使用的数据库类型(如MySQL、PostgreSQL、SQL Server等)。这里我提供一个较为通用的思路和一个基于假设是MySQL数据库的示例。
TrendStartDate
到这一天的总数据。这可能需要分组聚合或者窗口函数来实现跨行计算。在MySQL中,你可以使用以下步骤来实现:
CREATE TEMPORARY TABLE temp_dates AS
SELECT DATE_SUB(CURDATE(), INTERVAL @i := @i + 1 DAY) AS date
FROM (SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t,
(SELECT 0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) t2,
(SELECT @i := -1) var_init
WHERE @i < 365;
这段代码会创建一个临时表temp_dates
,包含过去365天的日期。
接下来,假设你的原始数据表名为your_table
,并且你想根据TrendStartDate
字段进行汇总,可以尝试如下SQL语句:
INSERT INTO your_aggregated_table (TrendStartDate, TrendEndDate, TotalCalls, AbnTime)
SELECT
d.date AS TrendStartDate,
MAX(t.TrendStartDate) AS TrendEndDate,
SUM(t.TotalCalls) AS TotalCalls,
SUM(t.AbnTime) AS AbnTime
FROM
temp_dates d
LEFT JOIN
your_table t ON d.date BETWEEN t.TrendStartDate AND IFNULL(t.TrendEndDate, CURDATE())
GROUP BY
d.date;
这个查询会为每一天生成一行记录,其中TotalCalls
和AbnTime
是该日期范围内所有记录的总和。注意,这里假设了如果没有明确的TrendEndDate
,则认为数据有效至当前日期(CURDATE())。
请根据你的实际数据库类型和表结构调整上述SQL语句。如果使用的是其他数据库系统,如PostgreSQL或SQL Server,可能会有更高效或更简洁的方式来生成日期序列和执行聚合操作。