2009-12-30 4 views
2

Je suis vraiment mauvais expliquant mais je vais essayer. Supposons que j'ai les tableaux suivants:MYSQL requête pour retourner l'entrée la plus récente indépendamment de la date entrée

CREATE TABLE inventory (
    Store VARCHAR(16), 
    Product_Code INT UNSIGNED, 
    Inventory_Qty INT UNSIGNED, 
    `Date` DATE 
); 

CREATE TABLE Alias (
    computername VARCHAR(16), 
    storename VARCHAR(32), 
); 

Je veux créer une requête MYSQL qui renvoie les données basées sur la dernière entrée dans la table. Je l'ai bien fait avec la fonction MAX basée sur la date, mais j'ai besoin de plus avancé pour trouver le dernier article entré par un produit spécifique et retourner la dernière quantité même si ce n'est pas la même date. Ceci est un exemple des données que je veux comme résultat:

 
Store| Product| Qty| Date 
S1 | 1115 | 10 | 12/30/09 
S2 | 1115 | 20 | 12/30/09 
S3 | 1115 | 5 | 12/29/09 
S4 | 1115 | 15 | 12/28/09 

La requête que j'ai est celui-ci, mais il ne retourne S1 et S2 parce que j'ai max à la date, mais je veux revenir le plus entrée récente du produit x par tous les magasins:

Select 
    alias.storename, 
    inventory.Product_Code, 
    inventory.Inventory_Qty, 
    inventory.Date 
    From inventory 
    Inner Join Alias On inventory.Store = Alias.computername 
    Where inventory.Date = (Select Max(inventory.Date) From inventory) 
    Order By Alias.storename, inventory.Product_Code 

Toute aide est vraiment apprécié

+0

Pour que quelqu'un puisse vous aider, vous devez indiquer les réponses qui vous semblent les plus proches, et comment elles peuvent vous aider. –

Répondre

2

Jetez un oeil à

SELECT i.* 
FROM (
      SELECT Store, 
        Product, 
        MAX(Date) MaxDate 
      FROM inventory 
      GROUP BY Store, 
         Product 
     ) MaxDates INNER JOIN 
     inventory i ON MaxDates.Store = i.Store 
         AND MaxDates.Product = i.Store 
         AND MaxDates.MaxDate = i.Date 

Cela tout d'abord obtenir le Max Date de par magasin par article puis retourner ce dossier pour lequel il est le Dernière entrée. Faites-moi savoir si j'ai mal compris votre demande.

+0

C'est exactement ce dont j'avais besoin. Merci beaucoup!! – chupeman

1

Si vous voulez que le dernier enregistrement est entré dans la table pour chaque magasin, puis

Select a.storename, 
    i.Product_Code, i.Inventory_Qty, i.Date 
From Alias a 
    left Join inventory i 
     On i.Store = a.computername 
      and i.Date = 
      (Select Max(Date) 
       From inventory 
       Where Store = i.Store) 
Order By a.storename, i.Product_Code 
0

Je crois que cela vous obtenez ce que vous voulez:

SELECT 
    alias.storename, 
    inventory.Product_Code, 
    inventory.Inventory_Qty, 
    lastdate.date 
FROM (
    SELECT 
     store, 
     max(date) as date 
    FROM inventory 
    GROUP BY store 
    ) lastdate 
INNER JOIN inventory 
    ON inventory.store = lastdate.story 
     AND inventory.date = lastdate.date 
INNER JOIN alias 
    ON inventory.store = alias.computername 
ORDER BY 
    alias.storename, 
    inventory.Product_Code 

Cela obtenir tous les articles que chaque magasin a vendu à la dernière date qui a vendu ce magasin tous les articles.

Questions connexes