SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 31.03.2008 15:55:32

Руслан
Участник
Зарегистрирован: 26.03.2008
Сообщений: 13

Помогите составить умный запрос

Есть поля координаты x,y,время time,дата date, скорость V
Необходимо составить запрос, чтобы находил запись время1,где V1<2, время2 где V2>8 условия чтобы разница (время2-время1)>5мин и (x2-x1)>0.002 и (y2-y1)>0.002, дальше следующая запись но начиная со следующей записи после время 2.

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

SELECT t1.time,t1.date, (IFNULL((SELECT time FROM table2 t2 WHERE t2.date=t1.date AND t2.time>t1.time and t2.V>8 and (t2.x-t1.x)>0.002 and (t2.y-t1.y)>0.002  ORDER BY t2.time limit 1), t1.time))
FROM table1 t1 where t1.V<2  GROUP BY date;

Таблица подобная этой


   x                         y                   V            time                   date
6055,65                7635,619    1,09    00:11:38    29.3.2008
6055,648    7635,615    1,98    00:11:45    29.3.2008
6055,646    7635,605    5    00:11:51    29.3.2008
6055,646    7635,61       2,54    00:11:56    29.3.2008
6055,647    7635,614    3,13    00:12:01    29.3.2008
6055,647    7635,618    1,93    00:12:06    29.3.2008
6055,648    7635,621    2,11    00:12:11    29.3.2008
6055,648    7635,624    2,06    00:12:16    29.3.2008
6055,649    7635,627    2,72    00:12:21    29.3.2008
6055,649    7635,622    2,94    00:12:25    29.3.2008
6056,399    7634,079    0,37    01:23:59    29.3.2008
6056,385    7634,044    0,02    01:24:04    29.3.2008
6056,384    7634,042    0,07    01:24:10    29.3.2008
6056,384    7634,042    0,09    01:24:13    29.3.2008
6056,385    7634,015    0    01:24:17    29.3.2008
6056,399    7633,953    39,19    01:24:24    29.3.2008
6056,404    7633,874    48,04    01:24:30    29.3.2008
6056,399    7633,776    58,63    01:24:36    29.3.2008
6056,396    7633,683    60,8    01:24:41    29.3.2008
6056,394    7633,596    52,1    01:24:46    29.3.2008
6056,392    7633,528    33,87    01:24:51    29.3.2008
6056,39                7633,496    22,41    01:24:55    29.3.2008
6056,388    7633,473    9,22    01:25:02    29.3.2008
6056,384    7633,439    31,8    01:25:07    29.3.2008
6056,382    7633,393    44,91    01:25:11    29.3.2008
6056,38      7633,287    54,8    01:25:18    29.3.2008
6056,377    7633,217    58,47    01:25:22    29.3.2008
6056,374    7633,13                52,87    01:25:27    29.3.2008
6056,371    7633,056    42,78    01:25:32    29.3.2008
6056,369    7632,998    20,72    01:25:38    29.3.2008
6056,368    7632,98                2,46    01:25:43    29.3.2008
6056,368    7632,979    5,11    01:25:45    29.3.2008
6056,372    7632,947    23,04    01:25:52    29.3.2008
6056,372    7632,914    32,41    01:25:56    29.3.2008
6056,368    7632,835    41,73    01:26:03    29.3.2008
6056,367    7632,77    4           3,73    01:26:08    29.3.2008
6056,365    7632,701    45,04    01:26:13    29.3.2008
6056,363    7632,644    47,26    01:26:17    29.3.2008
6056,362    7632,585    47,99    01:26:21    29.3.2008
6056,359    7632,483    47,45    01:26:28    29.3.2008
6056,357    7632,407    51,69    01:26:33    29.3.2008
6056,355    7632,327    52,23    01:26:38    29.3.2008
6056,352    7632,262    54    01:26:42    29.3.2008
6056,351    7632,176    57,45    01:26:47    29.3.2008
6056,35                7632,07                57,56    01:26:53    29.3.2008
6056,349    7631,982    57,04    01:26:58    29.3.2008
6056,35     7631,899    45,71    01:27:03    29.3.2008
6056,35                7631,861    17,5    01:27:07    29.3.2008
6056,35      7631,854    0,07    01:27:12    29.3.2008
6056,35     7631,854    0,13    01:27:18    29.3.2008
6056,35                7631,854    0,17    01:27:22    29.3.2008
6056,35     7631,854    2,39    01:27:28    29.3.2008
6056,354    7631,841    22,17    01:27:32    29.3.2008
6056,377    7631,83                31,54    01:27:38    29.3.2008
6056,394    7631,832    20,91    01:27:42    29.3.2008
6056,4                7631,831    0,07    01:27:48    29.3.2008
6056,4                7631,832    0,04    01:27:53    29.3.2008
6056,4               7631,832    0,13    01:27:58    29.3.2008
6056,4               7631,832    0,06    01:28:03    29.3.2008
6056,4               7631,832    0,06    01:28:08    29.3.2008
6056,4               7631,832    0,11    01:28:13    29.3.2008
6056,4               7631,832    0,11    01:28:18    29.3.2008
6056,4               7631,832    0,09    01:28:24    29.3.2008
6056,4               7631,832    0,09    01:28:28    29.3.2008
6056,4                7631,832    0,11    01:28:49    29.3.2008
6056,402    7631,832    9,07    01:28:55    29.3.2008
6056,414    7631,827    26,74    01:29:00    29.3.2008
6057,104    7631,797    71,89    01:30:35    29.3.2008
6057,158    7631,8                70,52    01:30:40    29.3.2008
6057,21     7631,804    70,28    01:30:45    29.3.2008

Неактивен

 

#2 31.03.2008 16:14:23

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Помогите составить умный запрос

GROUP BY date приводит к тому, что один результат за сутки

Неактивен

 

#3 31.03.2008 16:32:10

Руслан
Участник
Зарегистрирован: 26.03.2008
Сообщений: 13

Re: Помогите составить умный запрос

Спасибо, сейчас проверю, но как быть с тем, что после получения первой записи time1,date,time2 следущая строка time1 будет браться из диапазона от time1 до time2 т.к. там тоже V<2, т.е. будет повторение со всеми строками от time1 до time2, а надо, чтобы следующая запись искалась из диапазона time2+1 запись. Может я иду не по правильному и рациональному пути т.к. подобные запосы занимают много времени порядка десяток секунд, может стоит оптимизировать базу.

Неактивен

 

#4 01.04.2008 20:12:04

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Помогите составить умный запрос

Наверное такие запросы не стоит делать средствами базы. Эту функцию легко реализовать, скажем на PHP. В MySQL останется только вариант внутри хранимой процедуры через курсор

Неактивен

 

#5 02.04.2008 16:27:26

Руслан
Участник
Зарегистрирован: 26.03.2008
Сообщений: 13

Re: Помогите составить умный запрос

Небольшая просьба, примерчик подобного обращения к базе (я такое уже пробовал делать, но только INSERT в базу). Как составить вышеозначенный запрос в php пусть самы простой , книжки есть сам до ума доведу.

Неактивен

 

#6 03.04.2008 00:58:39

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3878

Re: Помогите составить умный запрос

mysql_connect(...);
mysql_select_db('db_name');
$sql = mysql_query("SELECT * FROM tbl ORDER BY id");

$result = mysql_query($sql) or die(mysql_error());

while($aRow = mysql_fetch_assoc($result)) {
  здесь в $aRow будет хэш, со значениями из строки, можно проводить обработку в цикле
}

Неактивен

 

#7 03.04.2008 04:51:19

Руслан
Участник
Зарегистрирован: 26.03.2008
Сообщений: 13

Re: Помогите составить умный запрос

Спасибо

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson