URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 8788
[ Назад ]

Исходное сообщение
"Не получается запрос  - просьба помочь "

Отправлено UltraLaser , 25-Июн-10 12:21 
Прошу помочь вот с каким вопросом. Никак не могу построить SQL запрос в MySQL (хотя мне кажется конкретная платформа здесь не важна). Есть таблица с полями

id,
datetime,
value1 int,
value2 int,
value3 int


Каждый день в БД вносятся данные в хронологическом порядке (хронология по времени). На другой день тоже самое - например

1, 2010-05-10 12:03, 10, 20, 30
2, 2010-05-10 13:50, 15, 16, 45
3, 2010-05-10 18:15, 25, 48, 25
4, 2010-05-11 10:07, 09, 56, 32
5, 2010-05-11 14:20, 92, 89, 78
6, 2010-05-12 11:02, 14, 65, 38
7, 2010-05-12 11:05, 05, 11, 44


Мне нужно сделать выборку следующего вида

2010-05-10 18:15, 25, 48, 25
2010-05-11 14:20, 92, 89, 78
2010-05-12 11:05, 05, 11, 44

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

Запросы типа

SELECT max(datatime), value1, value2, value3 FROM tbl_test;

SELECT max(datatime), value1, value2, value3 FROM tbl_test GROUP BY date(datetime);

SELECT max(datatime), value1, value2, value3 FROM tbl_test GROUP BY date(datetime) ORDER BY datetime DESC;


не дают желаемого результата :( (и это расстраивает). Возвращается вот что
            
             |------ самое поздее время в рамках одного дня
             |
2010-05-10<--| 18:15, 10, 20, 30 <-- НО! данные из ПЕРВОЙ записи внутри дня...
2010-05-11 14:20, 09, 56, 32
2010-05-12 11:05, 11, 11, 44

Т.е нужно что то типа сортировки в обратном пордки ВНУТРИ групп (внутридневных групп) либо что то типа функции last - которая возвращала бы последнюю запись во внутредневном наборе.
У меня есть ощушение что это сделать можно одним запросом но видимо меня чета заклинило.
Буду очень признателен за ответ.


Содержание

Сообщения в этом обсуждении
"Не получается запрос  - просьба помочь "
Отправлено Вася , 25-Июн-10 13:17 
Как вариант - запись max(id) за день во временную таблицу и потом выдирание из предыдущей таблицы селектом строк с этими id.

"Не получается запрос  - просьба помочь "
Отправлено Pahanivo , 25-Июн-10 13:51 
выбрать, как ты уже сделал, ТОЛЬКО "максималное время дня" и сложить во временную таблицу
далее
вторым запросом найти пересечение таблиц


"Не получается запрос  - просьба помочь "
Отправлено UltraLaser , 25-Июн-10 18:23 
Сработало примерно следующее (спасибо за помощь с SQL.RU)

SELECT mytable.*
FROM mytable
  JOIN
(SELECT MAX(date_time_field) max_date_time FROM mytable GROUP BY DATE(date_time_field)) t
  ON mytable.date_time_field=t.max_date_time