Sql 向客户发送提醒信的最后一天的数据

Sql 向客户发送提醒信的最后一天的数据,sql,db2,Sql,Db2,我的查询遇到了一个问题。我的目标是让那些在过去14天里连续收到提醒信的客户得到他们收到提醒信的最后一个最长日期。下面是查询和结果。我只能将图片作为链接发布。 正如你可以从结果中看到的,我为同一个客户获得了多行不同日期的产品。发送的AHDLTR日期提醒函不希望使用当前日期表达式。表中的字段类型是分区十进制的,我尝试将其翻译到目前为止,但没有成功。 我希望你们能帮助我。我想你们组里的表情太多了。试试这个: select ar.AHCMP, ar.AHCUS#, cm.CMNAME, max(ar

我的查询遇到了一个问题。我的目标是让那些在过去14天里连续收到提醒信的客户得到他们收到提醒信的最后一个最长日期。下面是查询和结果。我只能将图片作为链接发布。

正如你可以从结果中看到的,我为同一个客户获得了多行不同日期的产品。发送的AHDLTR日期提醒函不希望使用当前日期表达式。表中的字段类型是分区十进制的,我尝试将其翻译到目前为止,但没有成功。


我希望你们能帮助我。

我想你们组里的表情太多了。试试这个:

select ar.AHCMP, ar.AHCUS#, cm.CMNAME, max(ar.AHDLTR)
from WSDATARG.ARIHDRFL ar left join
     WSDATARG.CUSMASFL cm
     on cm.CMCMP = ar.AHCMP and
        cm.CMCUS# = ar.AHCUS#
where ar.AHCMP in ('14', '15', '20') and
      ar.AHDLTR <> '0' and
      ar.AHDLTR >= current_date - 14
group by ar.AHCMP, ar.AHCUS#, cm.CMNAME;

您应该只按select中未聚合的列进行聚合。

我认为您在GROUP by中的表达式太多了。试试这个:

select ar.AHCMP, ar.AHCUS#, cm.CMNAME, max(ar.AHDLTR)
from WSDATARG.ARIHDRFL ar left join
     WSDATARG.CUSMASFL cm
     on cm.CMCMP = ar.AHCMP and
        cm.CMCUS# = ar.AHCUS#
where ar.AHCMP in ('14', '15', '20') and
      ar.AHDLTR <> '0' and
      ar.AHDLTR >= current_date - 14
group by ar.AHCMP, ar.AHCUS#, cm.CMNAME;

您应该只通过select中未聚合的列进行聚合。

我将以Gordon Linoff的答案为基础。在db2中,伪日期字段的转换可能如下所示,我现在无法对其进行测试:

select ar.AHCMP, ar.AHCUS#, cm.CMNAME, 
    DATE(TIMESTAMP(max(ar.AHDLTR) || '000000'))
from WSDATARG.ARIHDRFL ar left join
     WSDATARG.CUSMASFL cm
     on cm.CMCMP = ar.AHCMP and
        cm.CMCUS# = ar.AHCUS#
where ar.AHCMP in ('14', '15', '20') and
      ar.AHDLTR <> '0' and
      ar.AHDLTR >= REPLACE(CHAR(CURRENT DATE - 14 DAYS), '-', '')
group by ar.AHCMP, ar.AHCUS#, cm.CMNAME;
我正在铸造AHDLTR,例如“20180903”,后跟6个零小时、分、秒-以获得一种标准时间戳格式,例如“20180903000000”以获得时间戳,然后按照我认为您想要的日期,获得日期2018-09-03


搜索时,我必须将当前日期-14(例如2018-08-25)转换为字符(例如“2018-08-25”),并将连字符替换为空字符串(例如20180825)。

我将以Gordon Linoff的答案为基础。在db2中,伪日期字段的转换可能如下所示,我现在无法对其进行测试:

select ar.AHCMP, ar.AHCUS#, cm.CMNAME, 
    DATE(TIMESTAMP(max(ar.AHDLTR) || '000000'))
from WSDATARG.ARIHDRFL ar left join
     WSDATARG.CUSMASFL cm
     on cm.CMCMP = ar.AHCMP and
        cm.CMCUS# = ar.AHCUS#
where ar.AHCMP in ('14', '15', '20') and
      ar.AHDLTR <> '0' and
      ar.AHDLTR >= REPLACE(CHAR(CURRENT DATE - 14 DAYS), '-', '')
group by ar.AHCMP, ar.AHCUS#, cm.CMNAME;
我正在铸造AHDLTR,例如“20180903”,后跟6个零小时、分、秒-以获得一种标准时间戳格式,例如“20180903000000”以获得时间戳,然后按照我认为您想要的日期,获得日期2018-09-03


搜索时,我必须将当前日期-14(例如2018-08-25)转换为字符(例如“2018-08-25”),并将连字符替换为空字符串(例如20180825)。

嘿,Gordon,我认为这确实可行,但主要问题是AHDLTR是一个文本字段,格式为YYYYMMDD。如果我能以某种方式将其转换为与YYYYMMDD格式相同的日期格式,那么当前日期也应该可以。还提到,在原始帖子中,我试图翻译,但无法获得日期格式。@JaanisVeinberg。把它投到约会中有用吗?否则,就用“约会”吧。我没能参加工作,而且似乎也没能参加“约会”,你能帮我一下吗。仍在学习SQL作为工具:嘿,Gordon,我认为这确实可行,但主要问题是AHDLTR是一个文本字段,格式为YYYYMMDD。如果我能以某种方式将其转换为与YYYYMMDD格式相同的日期格式,那么当前日期也应该可以。还提到,在原始帖子中,我试图翻译,但无法获得日期格式。@JaanisVeinberg。把它投到约会中有用吗?否则,就用“约会”吧。我没能参加工作,而且似乎也没能参加“约会”,你能帮我一下吗。仍在学习SQL作为工具:你在使用什么数据库?它真的是DB2吗?我不是100%确定,但我认为它是IBMDB2。您使用的是什么数据库?它真的是DB2吗?我不是100%确定,但我认为它是IBM DB2。您可能会发现CHARINTEGERCURRENT DATE-14天也可以让您使用它20180825@Pavol亚当,你的查询帮助我解决了伪日期字段的问题。谢谢你,伙计。你可能会发现CHARINTEGERCURRENT DATE-14天也可以让你20180825@Pavol亚当,你的查询帮助我解决了伪日期字段的问题。谢谢你,伙计。