我的查询遇到问题。我的目标是吸引过去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
我希望你们能帮助我。
答案 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)。