2017-03-29 2 views
0

J'ai deux tables:Utiliser résultat de la requête en tant que paramètre pour une autre requête

Table item -> itemId -> itemName

factures de table -> InvoiceID -> InvoiceNum -> InvoiceDate - > ItemId etc (non pertinent).

Je dois trouver, pour un article distinct, la date de facturation la plus récente (et la plus récente). Jusqu'à présent, je créer une première requête distincte sur la première table, puis, pour chaque résultat que j'exécuter une nouvelle requête sur la deuxième table (top 1 triés par date desc)

Il fonctionne, mais il faut toujours (je plus de 10000 articles). J'utilise asp classic et access mais je suis à peu près sûr que le problème est lié au SQL.

J'ai essayé avec la clause WHERE ... IN mais la requête affiche toutes les dates de facturation et pas seulement la dernière.

Toute aide? Merci d'avance! Je comprends que j'ai été très générique. ici est l'instruction SQL que je suis en train d'utiliser:

SELECT table1.id, table3.name, table1.name, table2.trans_num, Max (table2.transaction_date_h) AS MaxDitransaction_date_h, table2.amount_amt DE table3 INNER REJOIGNEZ (tableau 1 INNER JOIN table2 SUR 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. nom, table1.name, table2.trans_num, Max (table2.transaction_date_h) DESC;

Si j'exécute cette requête, le résultat est l'intégralité du jeu d'enregistrements. Comme dit, je voudrais récupérer uniquement la dernière transaction_date_h pour chaque table1.id distinct

Répondre

1

Si vous voulez juste article Id et dernière date de facturation, puis utilisez l'agrégation simple:

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

Si vous avez besoin article trop de détails, se joindre au-dessus avec table d'article:

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; 

ou:

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;