Sql (Teradata)获取前12个月、3个月和1个月的总和值

Sql (Teradata)获取前12个月、3个月和1个月的总和值,sql,teradata,Sql,Teradata,我有一个我正在使用的查询,我需要得到前12个月、3个月和上个月的值,但不知道如何做 我目前的查询如下: 选择前100名 A.发票编号 ,A.发票日期 ,A.从哥伦比亚特区发货 ,A.运送至商店 ,A.拖车编号 ,B.项目编号 ,C.old_nbr ,C.whpk\u数量 ,C.vnpk\U数量 ,C.项目类型代码 ,D.po_型 ,将每个装运数量汇总为每个装运数量 ,SUMB.variable_wt_数量作为variable_wt_数量 ,SUMB.ext\u成本金额作为ext\u成本金额 来自

我有一个我正在使用的查询,我需要得到前12个月、3个月和上个月的值,但不知道如何做

我目前的查询如下:

选择前100名 A.发票编号 ,A.发票日期 ,A.从哥伦比亚特区发货 ,A.运送至商店 ,A.拖车编号 ,B.项目编号 ,C.old_nbr ,C.whpk\u数量 ,C.vnpk\U数量 ,C.项目类型代码 ,D.po_型 ,将每个装运数量汇总为每个装运数量 ,SUMB.variable_wt_数量作为variable_wt_数量 ,SUMB.ext\u成本金额作为ext\u成本金额 来自DB.DC\U发票A 在A.INVOICE\u nbr=B.INVOICE\u nbr和A.INVOICE\u date=B.INVOICE\u date和A.ship\u to\u store\u nbr=B.ship\u to\u store\u nbr上内部联接DB.DC\u INVOICE\u行 内部连接DB.item C on B.item_nbr=C.item_nbr 左连接B.po\U nbr=D.po\U nbr上的采购订单D -式中,A.发票日期='2019-09-05'和A.发货自D.dc\U nbr=6011 分组 A.发票编号 ,A.发票日期 ,A.从哥伦比亚特区发货 ,A.运送至商店 ,A.拖车编号 ,B.项目编号 ,C.old_nbr ,C.whpk\u数量 ,C.vnpk\U数量 ,C.项目类型代码 ,D.po_型 我尝试在12个月的专栏中添加以下内容:

选择SUMvnpk_数量 来自DB.C项 内部联接DB.DC\U发票\U B.item\U nbr=C.item\U nbr上的B行 内部联接DB.DC\u发票A在A.INVOICE\u nbr=B.INVOICE\u nbr和A.ship\u to\u store\u nbr=B.ship\u to\u store\u nbr之间以及DATEADDdd、A.INVOICE\u date、-365和DATEADDdd、A.INVOICE\u date、-1 然而,这给了我一个错误:

[Teradata][ODBC Teradata Driver][Teradata Database] Syntax error: expected something between the 'and' keyword and the 'BETWEEN' keyword.

对于如何获取我正在寻找的数据的任何建议,我都将不胜感激。

您可以使用条件聚合逻辑和添加功能。以下是总体思路:

选择 总和 如果A.发票日期>添加月份当前日期,-12,则vnpk数量结束 作为12个月的总和, 总和 如果A.发票日期>添加月份当前日期,-3,则vnpk数量结束 作为3个月的总和, 总和 如果A.发票日期>添加月份当前日期,-1,则vnpk数量结束 作为一个月的总和 来自DB.DC\U发票A 因此,对于您的查询,它将如下所示:

选择前100名 A.发票编号 ,A.发票日期 ,A.从哥伦比亚特区发货 ,A.运送至商店 ,A.拖车编号 ,B.项目编号 ,C.old_nbr ,C.whpk\u数量 ,C.vnpk\U数量 ,C.项目类型代码 ,D.po_型 ,将每个装运数量汇总为每个装运数量 ,SUMB.variable_wt_数量作为variable_wt_数量 ,SUMB.ext\u成本金额作为ext\u成本金额 -新领域 总和 当A.发票日期>添加月份当前日期-12,则C.vnpk数量结束时的情况 作为12个月的总和, 总和 如果A.发票日期>添加月份当前日期,-3,则C.vnpk数量结束 作为3个月的总和, 总和 当A.invoice\u date>ADD\u months current\u date,-1则C.vnpk\u数量结束时的情况 作为一个月的总和 -结束新字段 来自DB.DC\U发票A 在A.INVOICE\u nbr=B.INVOICE\u nbr和A.INVOICE\u date=B.INVOICE\u date和A.ship\u to\u store\u nbr=B.ship\u to\u store\u nbr上内部联接DB.DC\u INVOICE\u行 内部连接DB.item C on B.item_nbr=C.item_nbr 左连接B.po\U nbr=D.po\U nbr上的采购订单D -式中,A.发票日期='2019-09-05'和A.发货自D.dc\U nbr=6011 分组 A.发票编号 ,A.发票日期 ,A.从哥伦比亚特区发货 ,A.运送至商店 ,A.拖车编号 ,B.项目编号 ,C.old_nbr ,C.whpk\u数量 ,C.vnpk\U数量 ,C.项目类型代码 ,D.po_型
您可以根据需要将类似的逻辑应用于其他求和。这仍然是一个正常金额,除非您选择何时根据发票日期在计算中包含行值。

过去12、3、1个月基于什么?日历日期?你的数据里有什么日期?样本数据和期望的结果在这里会有很大帮助。出现语法错误是因为需要指定-A.ship\u to\u store\u nbr=B.ship\u to\u store\u nbr和。。。。最后,dateadd不是Teradata函数。示例数据和所需结果将有所帮助。还需要您对前几个月的定义。是每排吗?这是相对于当前日期的吗?是日历月吗?字段日期是A.invoice\u日期,前x个月是相对于当前\u日期的@Andrew@gordonlinoff每一行都是一个项目,前一行是从当前日期开始的,前一个月的总和为12field@lecarusin在这种情况下,Ravioli的条件聚合是正确的基本方法。我仍然不知道它是否真的能给你你想要的,因为我们不知道你想要什么。这会是在一列中还是在三个不同的列中?这里有点混乱,这将为每个总和返回一个单独的列。请稍后查看更新的答案。这方面运气好吗?你能让它工作吗?是的,它工作了,非常感谢你;对不起,迟了答复