Sql Oracle:无法根据插入的最新记录获取记录并与多个表联接
我有以下表格:Sql Oracle:无法根据插入的最新记录获取记录并与多个表联接,sql,oracle,join,oracle10g,left-join,Sql,Oracle,Join,Oracle10g,Left Join,我有以下表格: USERS USERID EMAIL ---------------------- 1 xxx@xxx.com 2 yyy@yyy.com AUDIT_ITEM AI_ID AI_NAME ---------------------------- 1 AAA 2 BBB 3 CCC 4
USERS
USERID EMAIL
----------------------
1 xxx@xxx.com
2 yyy@yyy.com
AUDIT_ITEM
AI_ID AI_NAME
----------------------------
1 AAA
2 BBB
3 CCC
4 DDD
AUDIT_LOG
AL_ID USERID AI_ID PACKAGING_ID INSERT_DATE
--------------------------------------------------------------------
1 2 1 100 09/09/2014
2 1 2 102 09/09/2014
3 1 3 103 09/09/2014
4 1 1 100 09/09/2014 ( LATEST RECORD INSERTED)
现在,我希望用户电子邮件基于插入AUDIT_LOG表中的最新记录(在本例中为xxx@xxx.com)其中AI_NAME='AAA'和包装ID=100。注:插入日期为日期类型这使用
with
子句将日志条目限制为包装id 100和ai名称AAA的日志条目。然后它就变成了:
with logs as
(select l.*
from audit_log l join audit_item i on l.ai_id = i.ai_id
where l.packaging_id = 100 and i.ai_name = 'AAA')
select u.email
from users u join logs l on u.userid = l.userid
where l.insert_date = (select max(insert_date) from logs);
“插入最后一条记录”的标准是什么?如果是
插入日期
,那么所显示的四条记录没有区别。如果它是最大的AL_ID
,那么你应该这么说。是的,它的插入日期必须决定哪条记录是最晚的,但是INSERT_日期在所有四条记录上都是相同的,那么你怎么知道哪一条是最晚的呢?INSERT_日期是DATE类型的,在oracle中它只显示日期,但实际上它也有时间,因此,我们必须在考虑时间戳的基础上确定时间戳,因为您没有考虑AI_NAME='AAA',所以这不起作用,我只想在查询中查找AI_ID=1,我们应该检查像where audit_log.AI_ID=audit_item.AI_ID和audit_item.NAME='AAA'更新以包括项目条件。感谢您的支持,但我对在查询中放置PACKAGING_ID=100感到困惑,因为我只想将其添加到where
子句中,正如我在上一次编辑中所做的。此查询不会给出任何结果,如果删除日期检查,则它将返回两条记录,其中电子邮件为xxx@xxx.com & yyy@yyy.com但我只需要一个xxx@xxx.com哪个是最新的