使用查询结果作为另一个查询的参数

时间:2017-03-29 18:27:08

标签: sql ms-access subquery distinct

我有两张桌子:

table1:item(itemId,itemName)

table2:发票(InvoiceId,InvoiceNum,InvoiceDate,ItemId..etc)(其他列不相关)。

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

它有效,但它需要永远(我有超过10000项)。 我正在使用asp经典和访问,但我很确定该问题与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 table3 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

1 个答案:

答案 0 :(得分:1)

如果您只想要商品ID和最新发票日期,请使用简单聚合:

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;