
如上图,取出所有 查询年月 - 1年的数据。
比如:查询年月 = 2024.06,
那么所有小于等于 202306的数据都满足。结果是右侧绿色的数据集,金额合计81。
本题的难点是,查询年月是动态输入的变量,不是固定值。要提供一个年月字段用于用户查询,然后取出所有 -1年的数据。
可以表自己关联自己,也可以新建一个字段。
用SAP HANA SQL怎么实现 ?

以下回复参考:皆我百晓生、券券喵儿等免费微信小程序作答:
在SAP HANA SQL中,你可以使用动态输入参数来实现这个功能。你可以使用绑定变量来代表查询中的动态值,并在查询中使用这些变量。下面是一个可能的解决方案,假设你的表名为your_table_name并且有两个字段year_month和amount。
首先,你需要创建一个存储过程或使用一个查询语句来接受查询年月作为参数,并返回前一年的数据。假设查询年月是一个字符串格式如 'YYYY.MM',你可以如下实现:
CREATE FUNCTION GetPreviousYearData(input_year_month VARCHAR(7))
RETURNS TABLE(year_month VARCHAR(7), amount DECIMAL)
AS
BEGIN
SELECT year_month, amount
FROM your_table_name
WHERE year_month < CAST(input_year_month AS INTEGER) - INTERVAL '1 year'
ORDER BY year_month DESC; -- 按年月降序排列,根据你的需求调整排序方式
END;
在这个函数中,我们将输入的年月字符串转换为整数,然后减去一年的间隔(以获取前一年的数据)。然后,我们在WHERE子句中使用这个计算得到的值来过滤数据。请注意,我们假设你的year_month字段已经存储为YYMMDD格式。如果不是这样,你可能需要进行额外的格式转换或解析操作。
要调用这个函数并获取结果,你可以执行以下查询:
SELECT * FROM GetPreviousYearData('2024.06');
这将返回所有小于 '2023.06' 的记录,并按年份和月份降序排列。如果你需要计算金额的总和,你可以使用SUM函数来计算:
SELECT SUM(amount) FROM GetPreviousYearData('2024.06');
请注意,这只是一个基本示例,并可能需要根据你的实际数据库架构和数据字段名称进行调整。如果你的year_month字段是以不同的格式存储的(例如年月之间有空格或其他的格式),你可能需要相应地调整字符串处理逻辑。此外,请确保在编写和测试SQL代码时考虑到性能和安全性问题。