2009-10-23 6 views
1

Quelqu'un peut-il m'aider avec le ceci?Mysql Group par problème?

Ceci est ma structure de la table:

 
rec_id product_id quantity quantity_in quantity_out balance stock_date status 

    1  2   342   NULL   17  325 2009-10-23  1 
    2  2   325   NULL   124  201 2009-10-23  1 
    3  1   156   NULL   45  111 2009-10-23  1 
    4  2   201   NULL   200   1 2009-10-23  1 
    5  2   1   NULL   1   0 2009-10-23  1 
    6  1   111   NULL   35   76 2009-10-23  1 

Tout ce que je veux est la dernière transaction effectuée pour un produit donné: product_id, quantity, quantity_out et balance de ce tableau.

exemple, il existe deux transaction effectuée pour l'article 2 (ids 1 & 2):
solde final pour product_id 2 est 0 -> stockée dans rec_id 5
solde final pour product_id 1 est de 76 -> stockée dans rec_id 6

Résultat final/sortie devrait ressembler à ceci:

 
recid productid quantity quantityin quantityout balance stock_date status 
    5   2   1  NULL   1   0  2009-10-23 1 
    6   1  111  NULL   35  76  2009-10-23 1 

Merci

+0

Svp soyez plus clair au sujet de votre résultat attendu ... montrez-le comme résultat de table –

+0

voulez le groupe d'enregistrements récents par product_id, de sorte que j'obtienne un seul enregistrement de produit. –

+0

Dans l'enregistrement 6 ci-dessus, pour product_id '1', l'enregistrement récent est rec_id 5 et pour product_id '2', l'enregistrement récent est rec_id 6 –

Répondre

0

Vous pouvez trouver le dernier enregistrement pour chaque produit comme:

select max(rec_id) as MaxRec 
from YourTable 
group by product_id 

L'utilisation d'un sous-requête, vous pouvez récupérer les dernières lignes pour leur produit:

select * 
from YourTable 
where rec_id in (
    select max(rec_id) as MaxRec 
    from YourTable 
    group by product_id 
) 
0

est ici une seule requête sans sous-requêtes:

Vous pouvez modifier la liste de champs comme vous voulez - assurez-vous de sélectionner les champs de la main, pas plus récent, qui devrait être tout nul.