2017-03-29 138 views
0

我有两个表:使用查询结果作为参数的另一个查询

表项 - >的itemId - > ITEMNAME

表发票 - > InvoiceId - > InvoiceNum - > InvoiceDate - > ItemId 等(不相关)。

对于不同的项目,我需要找到最新(也是最新)的发票日期。 到目前为止,我创建了第一个不同的第一个查询,然后,对于每个结果我在第二个表上运行一个新的查询(顶部1按日期desc排序)

它的工作,但它需要永远(我有超过10000个项目)。 我使用asp classic和访问,但我很确定问题与SQL有关。

我尝试了条款WHERE ... IN,但查询输出所有发票日期,而不仅仅是最新的发票日期。

任何帮助? Thx提前!

我知道我一直非常通用。 这里是我尝试使用SQL指令:

SELECT table1.id,table3.name,table1.name,table2.trans_num,MAX(table2.transaction_date_h)AS MaxDitransaction_date_h,table2.amount_amt FROM表3 INNER JOIN(table1 INNER JOIN table2 ON table1.id = table2.item_id)ON table3.id = table1.preferred_vendor_id GROUP BY table1.id,table3.name,table1.name,table2.trans_num,table2.amount_amt ORDER BY table3。 name,table1.name,table2.trans_num,Max(table2.transaction_date_h)DESC;

如果我运行此查询,结果是整个记录集。 至于说,我想为每个不同的table1.id

回答

1

仅检索最新transaction_date_h如果你只想项目编号以及最新的发票日期,然后用简单的聚合:

select itemId, 
    max(InvoiceDate) as InvoiceDate 
from invoices 
group by itemId 

如果你需要项目详细信息也加入以上项目表:

select i.*, i2.InvoiceDate 
from item i 
join (
    select itemId, 
     max(InvoiceDate) as InvoiceDate 
    from invoices 
    group by itemId 
    ) i2 on i.itemId = i2.itemId; 

或:

select i.itemId, 
    i.itemName, 
    max(i2.InvoiceDate) as InvoiceDate 
from item i 
join invoices i2 on i.itemId = i2.itemId 
group by i.itemId, 
    i.itemName; 
相关问题