[MySQL ] туплю
подзапросы есть?
Ваще существуют и доступны
select id from xxx group by status ?
select * from table as t
where
id = (select max(id) from table where t.name = name)
and status = 1
Без подзапросов и чтоб в один запрос, имхо, никак.
В таблице
|========|
| id name|
| -- ----|
| 2 Вася|
| 4 Вася|
| 8 Вася|
|========|
SELECT id FROM table GROUP BY name вне зависимости от ORDER BY (поскольку он выполняется уже с полученными результатами, если я правильно понимаю) вернёт значение 2.
Собственно вопрос скатывается к тому как получить 8
UPD
To Alepar: К трём часам ночи совсем тяжёло уже стало Действительно в первый раз хрень написал. Но ты меня понял
SELECT id FROM table GROUP BY id вне зависимости от ORDER BY (поскольку он выполняется уже с полученными результатами, если я правильно понимаю)правильно понимаешь
вернёт значение 2.Вернет все три строки 2 4 8.
Ты слишком упростил исходную задачу. Тебе нужно добавить второй столбец, который будет одинаковый во всех строках, и по нему делать group by. Вобщем, я понял, что ты хотел сказать.
Собственно вопрос скатывается к тому как получить 8Никак. Правильная БД типа оракла, афаир, вообще не даст тебе сделать селект чего-то, не упомянутого в груп бай или несаггрегированного чем-нибудь, типа max.
SELECT id FROM table GROUP BY name вне зависимости от ORDER BY (поскольку он выполняется уже с полученными результатами, если я правильно понимаю) вернёт значение 2.Больше так не пиши!
Этот select вернёт тебе 2, 4 или 8. А что именно - никогда нельзя сказать точно.
В правильных БД при таком запросе вообще должна выдаваться ошибка.
Даже так? Т.е. вообще хз что вернёт? Я был уверен что первое значение по порядку. Но юзать это всё равно нельзя разумеется
Т.е. вообще хз что вернёт?Да, хз.
Хотя обычно это действительно первое значение.
mysql> select * from xxx;
+------+------+--------+
| id | name | status |
+------+------+--------+
| 1 | a | on |
| 2 | b | on |
| 3 | c | on |
| 4 | d | on |
| 5 | d | off |
| 6 | b | off |
+------+------+--------+
6 rows in set (0.00 sec)
mysql> select x.id from xxx as x
left join xxx as y on (x.name = y.name and x.id < y.id)
where y.id is null and x.status = 'on';
+------+
| id |
+------+
| 1 |
| 3 |
+------+
2 rows in set (0.00 sec)
Ух! Круто! Надо ботать юзание одной таблицы под двумя именами! Пасибо огромнгое!
... MAX(id*2+IF(STRCMP(status,"on"0,1 as xxx ... HAVING xxx % 2 = 1
Оставить комментарий
Ivan826
есть таблица с данными видаХочу выбрать номера имён с последним значением status=on.
Т.е. результатом запроса SELECT id был бы ответ [1,3] т.к. у имён Маша и Петя последний статус - off
Как написать такой запрос?
По логике вещей где-то должен быть оператор ORDER BY или DISTINCT, но куда его воткнуть не соображу никак
Объединение производится сверху