2010-09-14 1 views
2

У меня проблемы с sql-запросом. Вот почему я надеюсь, что некоторые из вас смогут мне помочь.Нужна помощь MySQL

У меня есть запрос, который выбирает последнюю запись из каждого реляционного идентификатора, но я хочу выбрать последнее, где состояние отличается. Таблица выглядит так.

+-----------+-------------+------+-----+-------------------+----------------+ 
| Field  | Type  | Null | Key | Default   | Extra   | 
+-----------+-------------+------+-----+-------------------+----------------+ 
| id  | int(11)  | NO | PRI | NULL    | auto_increment | 
| kid_id | int(11)  | NO |  | NULL    |    | 
| status | varchar(50) | NO |  | NULL    |    | 
| timestamp | timestamp | NO |  | CURRENT_TIMESTAMP |    | 
+-----------+-------------+------+-----+-------------------+----------------+ 

И мой текущий запрос выглядит так.

SELECT * 
      FROM (
       SELECT * 
       FROM actions 
       AS a 
       WHERE date(timestamp) = curdate() 
       AND timestamp = (
        SELECT max(timestamp) 
        FROM actions 
        AS b 
        WHERE a.kid_id = b.kid_id 
        ) 
       ) 
      AS c 
      ORDER BY kid_id 

И результат выглядит следующим образом:

id kid_id status timestamp 
54 1 Kommet 2010-09-15 00:14:51 
57 2 Gået 2010-09-15 00:17:58 
56 3 Kommet 2010-09-15 00:15:00 

Проблема заключается в том, что где kid_id равен 2, я хотел бы видеть последнюю запись, где состояние = "Kommet" ....

Я хочу, чтобы у каждого ребенка были две новейшие записи. Первая запись, где состояние = «Kommet» и второй, где статус = «Gået»

Заранее большое спасибо за вашу помощь ... Это действительно оценили :)

+1

Я добавил тег 'great-n-per-group'. Этот тип запросов был отвечен десятки раз в Stack Overflow. Пойдите, прочитайте некоторые из решений. –

ответ

1

Если вы не беспокоили о получении идентификатора, то вы могли бы выполнить следующие действия:

SELECT kid_id, status, MAX(`timestamp`) as `timestamp` 
FROM actions 
WHERE DATE(`timestamp`) = CURDATE() 
GROUP BY kid_id, status 

Если вы нуждались в id, ий не могли просто добавить к списку SELECT, хотя, как GROUP BY будет тянуть один из согласующих идентификаторов для отображения здесь , не обязательно тот, который соответствует MAX(timestamp).

+0

Большое спасибо, это очень помогло мне. Я сделал пару небольших модификаций, но в основном это решило мою проблему :) – nickifrandsen