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

如何从Sales_Date列获取对应上一年的Sales数据?

获取每条记录的上一年同期销售额

我有一张包含Sales_Date和Sales列的数据表,Sales_Date列的数据起始年份为2015年。需要获取每条记录对应的上一年同期Sales数据。

示例数据表

Sales_DateSales
1/1/2016$25
1/8/2016$57
1/1/2015$125
1/8/2015$21

期望结果集

Sales_DateSalesLYear_Sales_DateLYear_Sales
1/1/2016$251/1/2015$125
1/8/2016$571/8/2015$21

解决方案(SQL实现)

可以通过自连接的方式,将表与自身关联,匹配当前记录日期减一年后的同期数据:

通用SQL版本(支持DATEADD函数的数据库,如SQL Server)

SELECT 
    curr.Sales_Date,
    curr.Sales,
    prev.Sales_Date AS LYear_Sales_Date,
    prev.Sales AS LYear_Sales
FROM 
    your_table_name curr
LEFT JOIN 
    your_table_name prev ON DATEADD(year, -1, curr.Sales_Date) = prev.Sales_Date
WHERE 
    prev.Sales_Date IS NOT NULL; -- 过滤无对应上一年数据的记录

MySQL版本

SELECT 
    curr.Sales_Date,
    curr.Sales,
    prev.Sales_Date AS LYear_Sales_Date,
    prev.Sales AS LYear_Sales
FROM 
    your_table_name curr
LEFT JOIN 
    your_table_name prev ON DATE_SUB(curr.Sales_Date, INTERVAL 1 YEAR) = prev.Sales_Date
WHERE 
    prev.Sales_Date IS NOT NULL;

PostgreSQL版本

SELECT 
    curr.Sales_Date,
    curr.Sales,
    prev.Sales_Date AS LYear_Sales_Date,
    prev.Sales AS LYear_Sales
FROM 
    your_table_name curr
LEFT JOIN 
    your_table_name prev ON curr.Sales_Date - INTERVAL '1 year' = prev.Sales_Date
WHERE 
    prev.Sales_Date IS NOT NULL;

说明

  • 自连接通过日期偏移精准匹配上一年同期的记录,确保日期完全对应(如1/1/2016对应1/1/2015)
  • WHERE子句会过滤掉无对应上一年数据的记录(比如2015年的记录,因数据起始于2015年,无2014年数据,故不显示)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:45:35