给了一个任务就是把一个项目用dm数据库正常跑起来,真的难呀,项目原本是使用的mysql、
问题寻找
dm数据库保存,我看mysql跑的挺好的,然后开始找原因。
其中还没有看懂这两个函数,特意搜了搜
LAST_DAY
取最后一天
DATE_SUB()
函数从日期减去指定的时间间隔。
发现原来是减掉日期的函数不支持。
问题处理
select *
FROM dwd.base_organizational_all_versions og
INNER JOIN
dwd.DWD_PER_ALL_ASSIGNMENTS_F ass on og.organization_id = ass.ORGANIZATION_ID
where LAST_DAY(DATE_SUB(CONCAT('202309', '01'), INTERVAL 1 MONTH)) BETWEEN ass.EFFECTIVE_START_DATE AND ass.effective_end_date
AND LAST_DAY(DATE_SUB(CONCAT('202309', '01'), INTERVAL 1 MONTH)) BETWEEN og.date_from and og.date_to
这个意思,'20230901’这个日期的上个月的最后一天
去查dm数据库的函数文档
不过我不是很理解为啥要制定月的1号的上个月 的最后一天,为啥这个逻辑不可以转换成制定月的1号的前一天,不就是上个月的最后一天了么,感觉可能是之前说的不是1号导致的吧
select *
FROM dwd.base_organizational_all_versions og
INNER JOIN
dwd.DWD_PER_ALL_ASSIGNMENTS_F ass on og.organization_id = ass.ORGANIZATION_ID
where LAST_DAY(add_days(CONCAT('202309','01'),-1)) BETWEEN ass.EFFECTIVE_START_DATE AND ass.effective_end_date
AND LAST_DAY(add_days(CONCAT('202309','01'),-1)) BETWEEN og.date_from and og.date_to