我有两张桌子:
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答案 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;