выберите максимальный идентификатор из текущего идентификатора mysql

#mysql #sql

#mysql #sql

Вопрос:

Учитывая базу данных…..

 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
  

Я хотел бы иметь возможность выбирать идентификатор менеджеров перед текущим именем, не относящимся к менеджерам. Так, например, результатом для bob будет tony или 3.

Я могу выяснить, как это сделать с помощью двух запросов

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

В результате этого я бы сделал другой выбор с помощью item_order. Есть ли способ сделать все это за один выбор?

Комментарии:

1. не могли бы вы, пожалуйста, объяснить более четко?? какое точное соотношение между ID и item_order ?? напишите желаемый результат

Ответ №1:

 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
  

Ответ №2:

 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
  

Это даст вам список всех не-менеджеров вместе с именами тех менеджеров, которые непосредственно предшествуют им (на основе item_order ).

Если вы хотите вернуть только одну строку для определенного не-менеджера, добавьте еще одно условие, подобное этому:

   AND n.Name = 'bob'