我试图查询的 oracle 表有多个日期列,这些列提供仓库活动的时间戳,包括与之关联的项目和位置。
我正在尝试查找在某个日期位于某个位置的项目。该位置的活动时间戳(例如添加更多产品、更换新产品、计数等)列出了该项目。我正在查找日期的最大值,因为它低于某个目标,以便找到在时间戳和我的目标日期时间内最后记录在那里的项目。我对此的查询如下:
SELECT ITEM,LOCATION,ANVDATE
FROM PLATEHISTORY WHERE
ANVDATE = (SELECT MAX(ANVDATE) FROM PLATEHISTORY WHERE
ANVDATE <= ('3-Jan-18') AND LOCATION in ('4446D01'))
AND LOCATION in ('4446D01');
这一切都很好,但是第二列 WHENOCCURRED 也有我想要的时间戳,它们不匹配。在 WHENOCCURRED 中可能发生了具有不同项目的较新活动,但未显示在 ANVDATE 中,在这种情况下,如果我查询 ANVDATE,我将获得有关该位置项目的虚假信息。
这是我的意思的简要说明:
LOCATION ITEM ANVDATE WHENOCCURRED
4446D01 MK0C2AM/A 02-JAN-18 06-FEB-18
4446D01 MP812LL/A 14-DEC-17 31-DEC-17
4446D01 MP812LL/A 14-DEC-17 18-DEC-17
4446D01 MP812LL/A 14-DEC-17 26-DEC-17
4446D01 MK0C2AM/A 02-JAN-18 08-JAN-18
如您所见,我正在寻找项目“MK0C2AM/A”,但它必须通过 18 年 1 月 3 日之前的日期返回,因此尝试在 ANVDATE 和 WHENOCCURRED 之间进行 CASE 比较以获得更大的删除实际包含我想要的项目的条目。
如何在目标时间之前检查 ANVDATE 和 WHENOCCURRED 的最新更新,只选择最接近的更新,并从中获取 ITEM 和 LOCATION?