2011-05-14 3 views
3

courant donné la base de données .....select id max de id mysql

ID  Name  item_order  Manager 
1  ted  2    N 
2  bob  5    N 
3  tony  1    Y 
4  fred  3    N 
5  william 4    N 
6  george 6    Y 
7  cade  8    N 
8  matt  7    N 

Je voudrais être en mesure de choisir les gestionnaires Id avant le nom actuel non gestionnaires. Ainsi, par exemple le résultat de bob serait tony ou 3.

je peux comprendre comment faire avec deux demandes

SELECT MAX(item_order) AS parent 
FROM tablename WHERE item_order < 5 && Manager = 'Y' 

Le résultat de ce que je voudrais faire une autre sélection par le item_order. Y at-il un moyen de faire tout cela en un seul choix?

+0

se u s'il vous plaît expliquer plus clairement ?? Existe-t-il une relation entre 'ID' et' item_order' ?? écrivez votre sortie désirée – diEcho

Répondre

0
SELECT * FROM tablename 
WHERE Manager = 'Y' 
AND item_order = (SELECT MAX(item_order) AS parent 
        FROM tablename 
        WHERE item_order < 5 
        AND Manager = 'Y') AS t 
0
SELECT 
    n.*, 
    ManagerName = m.Name 
FROM tablename n 
    LEFT JOIN tablename m ON m.Manager = 'Y' AND n.item_order > m.item_order 
    LEFT JOIN tablename m2 ON m2.Manager = 'Y' 
    AND m2.item_order < n.item_order AND m2.item_order > m.Item_order 
WHERE n.Manager = 'N' 
    AND m2.ID IS NULL 

Cela vous donnera la liste de tous les non-cadres ainsi que les noms de ces gestionnaires qui les précèdent directement (basé sur item_order).

Si vous voulez seulement retourner une ligne pour un non-manager spécifique, ajouter une condition comme ceci:

AND n.Name = 'bob'