подскажите как переделать sql-запрос

number1215

Новичок
подскажите как переделать sql-запрос

есть сайт с тестами ... нужно вывести таблицу с лучшими результатами за каждый день текущего месяца

вот таким запросом вытаскиваю все результаты тестов за текущий месяц (с первого числа месяца по вчерашнее число):

PHP:
SELECT *, DATE_FORMAT(timestamp,'%d.%m.%Y') AS date 
FROM testresults
WHERE timestamp > '2008-06-01' AND timestamp NOT LIKE ('2008-06-28%') 
ORDER BY SUBSTRING(timestamp, 1, 10) DESC, answers_right DESC, answers_wrong ASC
получаю записи тестов за текущий месяц отсортированные по дате, количеству правильных ответов и количеству неправильных

после этого в скрипте выбираю только один самый "лучший" результат за каждое число

а можно переписать запрос так, чтобы вытаскивать сразу только один лучший результат за каждый день месяца???

:confused:
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
а можно переписать запрос так, чтобы вытаскивать сразу только один лучший результат за каждый день месяца???
Можно.

-~{}~ 28.06.08 17:22:

MAX
GROUP BY
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Готовый запрос ты вряд-ли получишь.
Если тебе по каким-то причинам это не нравится - тебя никто здесь не держит.
 

number1215

Новичок
Автор оригинала: Mr_Max
Готовый запрос ты вряд-ли получишь.
Тебя никто не держит здесь.
опять дешевые понты. я понимаю, что нужно сгруппировать по дате, но у меня не получается составить запрос, чтобы отдавал нужный мне результат и я не уверен, что это вообще возможно сделать только одним запросом ... если бы знал как, не написал бы сюда

я не жду готового примера, но ты своим груп бай и макс ничего мне не прояснил
 

kruglov

Новичок
Он прояснил то, что это сделать можно с помощью group by и max. И не надо искать как это делать не одним запросом.

Ну неужели неинтересно дальше самостоятельно найти разгадку? Что вообще делает group by? И по чему надо группировать в вашем случае?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Вместо того, чтобы брыгзать на всех слюной и говорить про понты посмотрел бы лучше в ман.
И показал _свои_ примеры попыток решения поставленной задачи.
А нытьем ты ничего не добьешься.
 

number1215

Новичок
kruglov
"не одним" запросом я сделал, мне интересно одним. возможно, что это нельзя - лан, поковыряю. Спасибо.

А, вообще, посмотрите тему - не кажется, что слишком много слов не по делу и пустого снобизма?! Лично по мне Mr_Max мог бы просто не отвечать, если сказать нечего.
 

Labutin

Новичок
Я смотрю Фaнат заразный и тут все под него начинают косить :(
 

Balloon

Новичок
Не знаю получится ли, но можно наверное в твой запрос добавить
GROUP BY DATE_FORMAT(timestamp, '%Y-%m-%d')

и теор. в результате останутся только лучшие резаультаты за каждый день.

зы. и вроде как MAX тут не нужен...
 

number1215

Новичок
Автор оригинала: Balloon
Не знаю получится ли, но можно наверное в твой запрос добавить
GROUP BY DATE_FORMAT(timestamp, '%Y-%m-%d')

и теор. в результате останутся только лучшие резаультаты за каждый день.

зы. и вроде как MAX тут не нужен...
неее, в этом случае запрос вытащит случайную запись за каждый день, т.к. когда используется инструкция GROUP BY, выбирать можно только значения группируемых столбцов или вычисленные для них итоговые значения. А мне нужны все поля.

Но спасибо за ответ - я уж думал тут все зазвездились ...

я не нашел решения как вытащить эту инфу (все поля "лучшей" записи за каждый день месяца) одним запросом

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

amadeus

Новичок
Если не коробит использование вложенных запросов то так
[SQL]
SELECT *, DATE_FORMAT(`timestamp`,'%d.%m.%Y') AS `date` FROM (SELECT * FROM `testresults` ORDER BY `answers_right` DESC, `answers_wrong` ASC ) `sorted` GROUP BY SUBSTRING(`timestamp`, 1, 10)
[/SQL]
из предварительно отсортированного выберется то что нужно. Можно ещё подумать, может что поинтереснее придумается.
 

number1215

Новичок
amadeus

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

Bitterman

вроде как тема называется "подскажите как переделать sql-запрос", а не "дайте ссылку на ман". И что? Там написано как это сделать одним запросом? Можно пример? Стоит ли отвечать, если все что вы можете ответить - "почитай ман, ламер". Мне не стыдно этого не знать - я не профессиональный программист - это не моя тема и я не часто мне приходилось использовать запросы сложнее стандартных. И задал я конкретный вопрос. На который хотел бы получить конкретный ответ.

А какая здесь дружелюбная атмосфера :) мне нравицца :)
 
Сверху