SQL-запрос для поиска строки с теми же значениями столбцов, которые были созданы совсем недавно - PullRequest
1 голос
/ 09 июля 2010

Если у меня есть три столбца в моей таблице MySQL people, скажем, id, name, созданный, где name - строка, а созданный - временная метка ... какой запрос подходит для сценария, в котором у меня есть 10 строк и каждая строказапись с именем.Имена могут иметь уникальный идентификатор, но, тем не менее, похожее имя.Таким образом, у вас может быть три Боба, две Мэри, один Джек и четыре Фила.

Существует также таблица hobbies с столбцами id, hobby, person_id.

По сути, я хочу запрос, который будет выполнять следующие действия:

Возвращать всех людей с нулевым увлечением, но проверять только последним созданным человеком, если это имеет смысл.То есть, если есть создатель Боба, который был создан вчера, а тот, который был создан сегодня ... Я только хочу знать, имеет ли созданный сегодня Боб ноль хобби.Тот, что был вчера, больше не актуален.

Ответы [ 3 ]

3 голосов
/ 09 июля 2010
select pp.id
from people pp, (select name, max(created) from people group by name) p
where pp.name = p.name
and pp.created = p.created
and id not in ( select person_id from hobbies )
2 голосов
/ 09 июля 2010
SELECT latest_person.* FROM (
  SELECT p1.* FROM people p1 
  WHERE NOT EXISTS (
    SELECT * FROM people p2 
    WHERE p1.name = p2.name AND p1.created < p2.created
  )
) AS latest_person
LEFT OUTER JOIN hobbies h ON h.person_id = latest_person.id 
WHERE h.id IS NULL;
0 голосов
/ 09 июля 2010

Попробуйте:

   Select *
   From people p
   Where timeStamp = 
         (Select Max(timestamp)
          From people 
          Where name = p.Name
             And not exists 
                 (Select * From hobbies
                  Where person_id = p.id))
...