Intereting Posts
Не удалось создать сеанс в php при вызове AJAX Как загрузить возвращаемый массив из файла PHP? Мне нужен совет, разрабатывающий чувствительную систему передачи / хранения / шифрования данных Oauth2 – как связать access_token с фактическим пользователем Как сгенерировать URL-адреса перенаправления, похожие на stackoverflow с использованием .htaccess и php? Не удалось проверить токен Google Access (неверное количество сегментов) Производительность PHP multi cURL хуже, чем последовательная file_get_contents Как определить, является ли реферер перенаправлением 301 WordPress: Список сообщений без комментариев CakePHP – проблема с запросом paginate HABTM Как прокомментировать файл laravel .env? Закрытие объектов внутри массивов до PHP 5.3 Простая форма, не отправляющая данные через _POST Как отправить форму с помощью php / ajax без открытия новой страницы при отправке Лучший способ получить счетчик результатов до применения LIMIT

SQL: как выбрать одну запись в день, предполагая, что каждый день содержит более 1 значения MySQL

Я хочу выбрать записи с '2013-04-01 00:00:00' до 'today' но каждый день имеет большую ценность, потому что они сохраняют каждые 15 минут значение, поэтому я хочу только первое или последнее значение с каждого дня.

Схема таблицы:

 CREATE TABLE IF NOT EXISTS `value_magnitudes` ( `id` int(11) NOT NULL AUTO_INCREMENT, `value` float DEFAULT NULL, `magnitude_id` int(11) DEFAULT NULL, `sdi_belongs_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `reading_date` datetime DEFAULT NULL, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1118402 ; 

Плохой SQL:

 SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-01 00:00:00' AND '2013-04-02 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1 SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-02 00:00:00' AND '2013-04-03 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1 SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-03 00:00:00' AND '2013-04-04 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1 SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-04 00:00:00' AND '2013-04-05 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1 SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-05 00:00:00' AND '2013-04-06 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1 etc ... 

Я хочу все в одном, если возможно …

Большое спасибо.

EDIT: Я имею в виду, у меня есть запрос в день, но я просто хочу сделать один запрос из reading_date >= '2013-04-01 00:00:00' c

EDIT2: у меня есть 64,260 записей в этой table.value_magnitudes и требуется sooooooooo для исключения и ответа на этот запрос, а иногда и на тайм-аут.

Чтобы получить первую запись за каждую дату, которую вы можете сделать

 select * from value_magnitudes where id in ( SELECT min(id) FROM value_magnitudes WHERE magnitude_id = 234 and date(reading_date) >= '2013-04-01' group by date(reading_date) ) 
 select * from value_magnitudes where id in ( SELECT min(id) FROM value_magnitudes WHERE `value_magnitudes`.`reading_date` BETWEEN '$from_selected' AND '$to_selected' and (magnitude_id = 234) group by date(reading_date) )