You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改SQL查询以识别两时间戳间预期销售额变动的营销活动

如何修改SQL语句以识别销售规划中变动的营销活动

表结构与测试数据

首先,我们的测试表结构和数据如下:

CREATE TABLE Sales_Planning ( Time_Stamp DATE, Campaign VARCHAR(255), Expected_Sales VARCHAR(255) );
INSERT INTO Sales_Planning (Time_Stamp, Campaign, Expected_Sales) VALUES 
("2019-11-04", "Campaign01", "300"), 
("2019-11-04", "Campaign02", "300"), 
("2019-11-04", "Campaign03", "300"), 
("2019-11-04", "Campaign04", "300"), 
("2019-11-05", "Campaign01", "600"), 
("2019-11-05", "Campaign02", "800"), 
("2019-11-05", "Campaign03", "300"), 
("2019-11-05", "Campaign04", "300"), 
("2019-11-06", "Campaign01", "300"), 
("2019-11-06", "Campaign02", "200"), 
("2019-11-06", "Campaign03", "400"), 
("2019-11-06", "Campaign04", "500");

需求说明

我们需要找出在2019-11-04(记为Time_Stamp_A)和2019-11-06(记为Time_Stamp_B)之间,Expected_Sales发生变动的营销活动,最终输出需要包含:营销活动名称、两个时间点、对应时间点的预期销售额,并且只保留销售额有变化的记录。

现有语句的问题

你当前的查询只是把两个时间点的数据查出来,并给时间点打了标签,但没有将同一营销活动的两个时间点数据横向关联,也没有筛选出销售额变动的记录,所以无法得到目标格式的结果。

修改方案:自连接+筛选

我们可以通过自连接(将表与自身关联)的方式,把同一营销活动在两个时间点的数据匹配到同一行,然后筛选出销售额不同的记录。修改后的SQL如下:

SELECT 
    a.Campaign,
    a.Time_Stamp AS Time_Stamp_A,
    b.Time_Stamp AS Time_Stamp_B,
    a.Expected_Sales AS Expected_Sales_A,
    b.Expected_Sales AS Expected_Sales_B
FROM 
    Sales_Planning a
JOIN 
    Sales_Planning b ON a.Campaign = b.Campaign
WHERE 
    a.Time_Stamp = '2019-11-04'
    AND b.Time_Stamp = '2019-11-06'
    AND a.Expected_Sales != b.Expected_Sales; -- 筛选出销售额变动的记录

结果验证

执行上述SQL后,会得到你期望的结果:

CampaignTime_Stamp_ATime_Stamp_BExpected_Sales_AExpected_Sales_B
Campaign022019-11-042019-11-06300200
Campaign032019-11-042019-11-06300400
Campaign042019-11-042019-11-06300500

补充说明

如果你的数据库支持PIVOT(比如SQL Server),也可以用透视表的方式实现,但自连接的方式兼容性更强,适用于大多数关系型数据库。另外,注意Expected_Sales字段是VARCHAR类型,如果后续有数值比较需求,建议改成INT类型,避免字符串比较带来的问题。

内容的提问来源于stack exchange,提问作者Michi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 19:23:13