The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Не получается запрос  - просьба помочь "
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (MySQL)
Изначальное сообщение [ Отслеживать ]

"Не получается запрос  - просьба помочь "  +/
Сообщение от UltraLaser (ok) on 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 - которая возвращала бы последнюю запись во внутредневном наборе.
У меня есть ощушение что это сделать можно одним запросом но видимо меня чета заклинило.
Буду очень признателен за ответ.

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


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

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Не получается запрос  - просьба помочь "  +/
Сообщение от UltraLaser (ok) on 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


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру