2017-03-29 182 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; 
相關問題