|
|
|
|
|
для: Zmeonish
(20.03.2008 в 12:45)
| | Ну так, мой запрос, написанный выше, для твоей задачи подходит. | |
|
|
|
|
|
|
|
для: olejek
(20.03.2008 в 10:29)
| | таблица содержит лог обращений разных пользователей (user) к записям (record) другой таблицы
смысл задачи - вывести список записей, к которым обращались пользователи отсортировав их хронологически в обратном порядке
если к записи было несколько обращении - выводить только последнее | |
|
|
|
|
|
|
|
для: Zmeonish
(20.03.2008 в 09:32)
| | А подойдет ли вариант select (***) from (****) order by record, timeStamp desc; ?
На похожей таблице у меня работает вполне корректно | |
|
|
|
|
|
|
|
для: Zmeonish
(19.03.2008 в 17:07)
| | >мне нужно "приручить" GROUP BY
Примите его таким, какой он есть
>Можно использовать вот такой извращённый способ:
Зачем же извращаться. У меня, например, никогда не возникало проблем с запросами GROUP BY.
Zmeonish, а можете написать, что это за поле record (его функциональное назначение)? | |
|
|
|
|
|
|
|
для: Zmeonish
(20.03.2008 в 09:32)
| | Можно использовать вот такой извращённый способ:
SELECT * FROM
(select * from `test` order by timeStamp desc)
GROUP BY record
|
Вообще, как я понимаю, при группировке MySql может оставить любую из строк, но практически он выбирает и оставляет первую строку из группы. | |
|
|
|
|
|
|
|
для: barba
(20.03.2008 в 08:33)
| | тогда переформулирую вопрос:
на каком основании при группировке строк по record
id record user timeStamp
1 1 1 2008-03-19 10:24:13
2 1 2 2008-03-19 10:24:41
выбирается первая строка
1 1 1 2008-03-19 10:24:13
как сделать так чтоб при группировке выбиралась строка с максимальным timeStamp ? Вариант с сортировкой по timeStamp и обрезанием вывода до 1 строки не предлагать, решить вопрос нужно именно с помощью группировки | |
|
|
|
|
|
|
|
для: Zmeonish
(19.03.2008 в 17:06)
| | Тем не менее GROUP BY в MySQL используется именно для выборки уникальных значений, как и DISTINCT с некоторыми отличиями | |
|
|
|
|
|
|
|
для: Obana
(19.03.2008 в 16:13)
| | мне нужно "приручить" GROUP BY
приведенный пример - сильно упрощенная модель реальной задачи, ORDER BY не подойдет | |
|
|
|
|
|
|
|
для: ronin80
(19.03.2008 в 16:09)
| | > всё логично, ты группируешь по полю record, а в нём всего два неповторяющихся значения 1 и2
нет, не логично, по стандарту SQL99, которому по идее должен следовать MySQL, выражение "GROUP BY" группирует строки по определенному полю, повторяю, группирует (собирает вместе) а не выбирает одни из них. Это еще как-то можно было понять если б строки были идентичные, но они неодинаковы!
на каком основании из 2 строк
1 1 1 2008-03-19 10:24:13
2 1 2 2008-03-19 10:24:41
была выбрана первая а не вторая?
если расширить условие выборки так, чтоб выбиралась самая "свежая" из 2 сгруппированных строк
SELECT id, record, user, MAX(timeStamp)
FROM `test`
GROUP BY record
id record user MAX(timeStamp)
1 1 1 2008-03-19 10:24:41
3 2 2 2008-03-19 10:25:26
то получается вообще каша - id, record и user будут от одной строки (id=1), а timeStamp - от другой (id=2) | |
|
|
|
|
автор: Obana (19.03.2008 в 16:13) |
|
|
для: Zmeonish
(19.03.2008 в 15:29)
| | чтобы получить такой результат используй
SELECT * FROM `test` ORDER BY record
id record user timeStamp
1 1 1 2008-03-19 10:24:13
2 1 2 2008-03-19 10:24:41
3 2 2 2008-03-19 10:25:16
4 2 1 2008-03-19 10:25:26
|
| |
|
|
|
|