Нужна помощь MySQL - PullRequest
       7

Нужна помощь MySQL

2 голосов
/ 15 сентября 2010

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

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

+-----------+-------------+------+-----+-------------------+----------------+
| 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 Я хотел бы видеть последнюю запись, где status = "Kommet" ....

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

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

1 Ответ

1 голос
/ 15 сентября 2010

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

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

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

...