最后一天的提醒信已发送给客户的数据

时间:2018-09-05 13:17:26

标签: sql db2

我的查询遇到问题。我的目标是吸引过去14天内(滚动)收到提醒函的客户,并且仅获得他们收到邮件的最后(最长)日期。以下是查询和结果。我只能将图片发布为链接。 Results for the query

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

从结果中可以看到,我为同一位客户获得了多行日期不同的行。并且AHDLTR(发送日期提醒信)不希望使用当前日期表达式。到目前为止,我曾尝试对“ Zoned Decimal”中的表中的字段类型进行“翻译”,但无法成功。 Table properties

我希望你们能帮助我。

2 个答案:

答案 0 :(得分:2)

我认为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中的未汇总列进行汇总。

答案 1 :(得分:0)

我将基于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')转换为TIMESTAMP,然后转换为DATE(如我想的那样)到)以获取日期2018-09-03。

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