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

     2023-04-19     202

关键词:

【中文标题】(Teradata) 获取前 12 个月、3 个月和 1 个月的 SUM 值【英文标题】:(Teradata) Get a SUM value of previous 12 months, 3 months and 1 month 【发布时间】:2019-10-24 13:47:52 【问题描述】:

我有一个正在使用的查询,我需要获取前 12 个月、3 个月和上个月的值,但不知道该怎么做。

我目前的查询如下:

select top 100 
A.invoice_nbr
, A.invoice_date
, A.ship_from_dc_nbr
, A.ship_to_store_nbr
, A.trailer_id
, B.item_nbr
, C.old_nbr
, C.whpk_qty
, C.vnpk_qty
, C.item_type_code
, D.po_type
, SUM(B.each_ship_qty) as each_ship_qty
, SUM(B.variable_wt_qty) as variable_wt_qty
, SUM(B.ext_cost_amt) as ext_cost_amt
from DB.DC_INVOICE A
inner join DB.DC_INVOICE_LINE B ON A.invoice_nbr = B.invoice_nbr and A.invoice_date = B.invoice_date and A.ship_to_store_nbr = B.ship_to_store_nbr
inner join DB.item C on B.item_nbr = C.item_nbr
left join DB.purchase_order D on B.po_nbr = D.po_nbr
--where A.invoice_date = '2019-09-05' and A.ship_from_dc_nbr = 6011
group by 
A.invoice_nbr
, A.invoice_date
, A.ship_from_dc_nbr
, A.ship_to_store_nbr
, A.trailer_id
, B.item_nbr
, C.old_nbr
, C.whpk_qty
, C.vnpk_qty
, C.item_type_code
, D.po_type

我尝试为“12 个月”添加以下内容作为另一列:

(SELECT SUM(vnpk_qty)
    FROM DB.item C
    inner join DB.DC_INVOICE_LINE B ON B.item_nbr = C.item_nbr
    inner join DB.DC_INVOICE A ON A.invoice_nbr = B.invoice_nbr and A.ship_to_store_nbr = B.ship_to_store_nbr and BETWEEN DATEADD(dd, A.invoice_date,-365) AND  DATEADD(dd, A.invoice_date,-1)
    )

但是这给了我错误:

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

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

【问题讨论】:

Past 12, 3, 1 month 基于什么?日历日期?您的数据中有某种日期?样本数据和期望的结果在这里会有很大帮助。您收到的语法错误是因为您需要指定介于 - A.ship_to_store_nbr = B.ship_to_store_nbr and <some column> BETWEEN ... 之间的内容。最后,dateadd 不是 Teradata 函数。 样本数据和期望的结果会有所帮助。还需要您对“前 个月”的定义。是每行吗?这与当前日期有关吗?那是日历月吗? 字段日期是 A.invoice_date,之前的“x 个月”是相对于 current_date @Andrew @gordonlinoff 每一行都是一个项目,前一行是从当前日期开始,该字段上个月 12 的总和 @lecarusin,在这种情况下,Ravioli 的条件聚合是正确的基本方法。我仍然不知道它是否真的会给你你想要的(因为我们不知道你想要什么)。 【参考方案1】:

您可以使用条件聚合逻辑和ADD_MONTHS 函数。大致思路如下:

SELECT 
  SUM(
    CASE WHEN A.invoice_date > ADD_MONTHS(CURRENT_DATE, -12) THEN vnpk_qty END
  ) AS sum_12month,
  SUM(
    CASE WHEN A.invoice_date > ADD_MONTHS(CURRENT_DATE, -3) THEN vnpk_qty END
  ) AS sum_3month,
  SUM(
    CASE WHEN A.invoice_date > ADD_MONTHS(CURRENT_DATE, -1) THEN vnpk_qty END
  ) AS sum_1month
FROM DB.DC_INVOICE A

所以对于您的查询,它看起来像:

select top 100 
A.invoice_nbr
, A.invoice_date
, A.ship_from_dc_nbr
, A.ship_to_store_nbr
, A.trailer_id
, B.item_nbr
, C.old_nbr
, C.whpk_qty
, C.vnpk_qty
, C.item_type_code
, D.po_type
, SUM(B.each_ship_qty) as each_ship_qty
, SUM(B.variable_wt_qty) as variable_wt_qty
, SUM(B.ext_cost_amt) as ext_cost_amt
-- New fields
SUM(
  CASE WHEN A.invoice_date > ADD_MONTHS(CURRENT_DATE, -12) THEN C.vnpk_qty END
) AS sum_12month,
SUM(
  CASE WHEN A.invoice_date > ADD_MONTHS(CURRENT_DATE, -3) THEN C.vnpk_qty END
) AS sum_3month,
SUM(
  CASE WHEN A.invoice_date > ADD_MONTHS(CURRENT_DATE, -1) THEN C.vnpk_qty END
) AS sum_1month
-- End new fields
from DB.DC_INVOICE A
inner join DB.DC_INVOICE_LINE B ON A.invoice_nbr = B.invoice_nbr and A.invoice_date = B.invoice_date and A.ship_to_store_nbr = B.ship_to_store_nbr
inner join DB.item C on B.item_nbr = C.item_nbr
left join DB.purchase_order D on B.po_nbr = D.po_nbr
--where A.invoice_date = '2019-09-05' and A.ship_from_dc_nbr = 6011
group by 
A.invoice_nbr
, A.invoice_date
, A.ship_from_dc_nbr
, A.ship_to_store_nbr
, A.trailer_id
, B.item_nbr
, C.old_nbr
, C.whpk_qty
, C.vnpk_qty
, C.item_type_code
, D.po_type

您可以根据需要将类似的逻辑调整到您的其他SUM()s。它仍然是一个普通的SUM,除非您根据invoice_date 选择何时在计算中包含行的值。

【讨论】:

这将全部在一列中还是在 3 个不同的列中?这里有点困惑 这将为每个 SUM() 返回一个单独的列。稍后查看更新的答案。 这个运气好吗?你能让它工作吗? 是的,非常感谢;抱歉回复晚了

使用Scala从给定月份获取前12个月的月底日期

】使用Scala从给定月份获取前12个月的月底日期【英文标题】:Getprevious12monthswithmonthenddatefromgivenmonthusingScala【发布时间】:2021-08-1207:28:27【问题描述】:我有一个用例从给定日期获取过去12个月的结束日期。例如,如果我输入为(... 查看详情

前 3 个月的值总和

】前3个月的值总和【英文标题】:Sumofvaluesfrom3rdpreviousmonth【发布时间】:2015-02-2018:53:09【问题描述】:我很难从12月开始抓取行(从上个月第3个月开始)。我正在尝试计算特定时间段内售出的产品数量。这是我当前的查询:SELE... 查看详情

一javascript获取当前月份的前12个月,获取最近的12个月二js实现获取当前月份前的12个月份,格式化后放在一个数组里

...  varyear=data.getFullYear();  data.setMonth(data.getMonth()+1,1)//获取到当前月份,设置月份  for(vari=0;i<12;i++)    data.setMonth(data.getMonth()-1);//每次循环一次月份值减1    varm=data.getMonth()+1;    m=m<10?"0"+m:m;    dataArr... 查看详情

如何使用 KDB 查询获取前几个月的数据?

】如何使用KDB查询获取前几个月的数据?【英文标题】:HowtogetpreviousmonthsdatausingKDBquery?【发布时间】:2012-06-1712:41:53【问题描述】:如何检索上个月的数据,如果要自动进行查询,则查询中的日期值每个月都会相应更改?例如... 查看详情

js如何获取前几个月或后几个月时间

/***获取几个月前的输入日期*{param:DateTime}date输入日期(YYYY-MM-DD)*{param:number}monthNum月数*/functionGetPreMonthDay(date,monthNum){vardateArr=date.split(‘-‘);varyear=dateArr[0];//获取当前日期的年份varmonth=dateArr[1];//获取当前 查看详情

获取最近 3 个月数据的 SQL 查询

】获取最近3个月数据的SQL查询【英文标题】:SQLqueryforgettingdataforlast3months【发布时间】:2014-03-2115:41:30【问题描述】:如何获取今天的日期并将其转换为01/mm/yyyy格式并从表中获取3个月前交货月份的数据?表中已包含交货月份为... 查看详情

一个账户前 12 个月的总收入 - Redshift SQL

】一个账户前12个月的总收入-RedshiftSQL【英文标题】:Totalrevenueofanaccountforthepreceding12months-RedshiftSQL【发布时间】:2021-03-0217:04:01【问题描述】:所以我的疑问在于sql。我正在查找过去12个月的父帐户的总收入。数据看起来像这样r... 查看详情

迅速从当前月份获取下一个第 3 个月的名称

】迅速从当前月份获取下一个第3个月的名称【英文标题】:Getnext3rdmonthnamefromthecurrentmonthinswift【发布时间】:2019-12-0507:34:22【问题描述】:我如何获得从当前月份到11月的第3个月名称。例如:-如果当前月份是11月,那么我想要... 查看详情

按月查询获取前n个月的平均值

】按月查询获取前n个月的平均值【英文标题】:Getavareageofnpreviousmonthsbymonthquery【发布时间】:2018-02-1918:19:22【问题描述】:我正在做一个查询,获取2列的计数和另一列的总和,从过去13个月的日期列按月份分组。这是我的查询... 查看详情

前 3 个月的滚动总和 SQL Server

】前3个月的滚动总和SQLServer【英文标题】:Rollingsumprevious3monthsSQLServer【发布时间】:2017-01-2113:54:26【问题描述】:我的表结构如下:Name|Type---------------|-----fiscalyear|varcharperiod|varcharcountry|varcharvalue|int我在SQLServer2012中遇到了一个... 查看详情

如何在SQL中获取当前日期最近六个月的前一个月数据

】如何在SQL中获取当前日期最近六个月的前一个月数据【英文标题】:HowtoGetfirstonemonthdatafromlastsixmonthfromcurrentdateinSQL【发布时间】:2022-01-0312:11:58【问题描述】:我们如何修改以下脚本以获取过去6个月的第一个月数据?selectdate... 查看详情

仅在 MySQL 中返回最近 3 个月的记录

...:40:10【问题描述】:我有一个带有时间戳字段的表。如何获取过去3个月的数据?特别是,3月是我当前的月份,比如说03/2012。我只需要返回3月、2月和1月的记录。【问题讨论】:【参考方案1】:今天前3个月:select*fromtablewheretime 查看详情

获取日期 - 3 个月

】获取日期-3个月【英文标题】:getthedate-3months【发布时间】:2018-09-3007:55:33【问题描述】:我正在尝试获取当前日期-3个月并在邮递员预请求脚本中使用它。有人告诉我它使用javascript,但它似乎不起作用。我得到的错误是:评... 查看详情

javascriptn(含跨年)个月日期

JS获取指定日期前后N天的日期、前N个月日期、后N个月日期_houniao1314的博客-CSDN博客_js计算当前时间n个月的时间https://blog.csdn.net/houniao1314/article/details/82762141经验证【支持跨年】JavaScript获取N个月前日期_我的专栏-CSDN博客_js获取6个... 查看详情

ios依据date获取x分钟前/x小时前/昨天/x天前/x个月前/x年前

 返回x分钟前/x小时前/昨天/x天前/x个月前/x年前-(NSString*)timeInfo{return[NSDatetimeInfoWithDate:self];}+(NSString*)timeInfoWithDate:(NSDate*)date{return[selftimeInfoWithDateString:[selfstringWithDate:dateformat:[ 查看详情

查找客户在过去 2 个月内是不是已有产品 SQL Teradata 到 SQL SAS

】查找客户在过去2个月内是不是已有产品SQLTeradata到SQLSAS【英文标题】:Findingifcustomerhasalreadyproductsinlast2monthsSQLTeradatatoSQLSAS查找客户在过去2个月内是否已有产品SQLTeradata到SQLSAS【发布时间】:2021-10-3123:19:25【问题描述】:希望... 查看详情

使用 oracle 获取过去 12 个月的计数及其差异

】使用oracle获取过去12个月的计数及其差异【英文标题】:fetchlast12monthscountandtheirvarianceusingoracle【发布时间】:2020-05-2213:25:28【问题描述】:withsalesas(selectCOUNT(sale)AsNumber_of_sale,TO_CHAR(dates,\'YYYY-MON\')AsPeriodfromorderswheredatesbetween 查看详情

SQL 返回另一个日期前 18 个月的所有记录(到月底)

】SQL返回另一个日期前18个月的所有记录(到月底)【英文标题】:SQLtoreturnallrecords18monthsaheadofanotherdate(toendofmonth)【发布时间】:2017-12-0604:10:12【问题描述】:我有一个包含两个DATETIME字段的表,OpeningDate和FinishingDate。我正在尝... 查看详情