Форум: "Базы";
Текущий архив: 2010.11.21;
Скачать: [xml.tar.bz2];
ВнизSQL запрос Найти похожие ветки
← →
Tonich (2009-07-16 15:25) [0]День добрый есть такой вопрос по SQL.
Предположим, есть таблица со следующими полями
ID
TIME
IDDEVICE
SWITCHCOUNT
ERRORCOUNT
И допустим, она заполнена следующими значениями
1 | 201 | 01.02.09 00:00 | 5 | 0
2 | 201 | 01.02.09 00:01 | 1 | 0
3 | 201 | 01.02.09 00:02 | 0 | 0
4 | 201 | 01.02.09 00:03 | 3 | 0
5 | 201 | 01.02.09 00:04 | 4 | 0
6 | 201 | 01.02.09 00:05 | 5 | 0
7 | 201 | 01.02.09 00:06 | 2 | 0
Те записи у которых SWITCHCOUNT > 0 объеденяются в кластеры. То есть для этого набора данных будет всего 2 кластера
1 | 201 | 01.02.09 00:00 | 5 | 0
2 | 201 | 01.02.09 00:01 | 1 | 0
и
4 | 201 | 01.02.09 00:03 | 3 | 0
5 | 201 | 01.02.09 00:04 | 4 | 0
6 | 201 | 01.02.09 00:05 | 5 | 0
7 | 201 | 01.02.09 00:06 | 2 | 0
Положим что у каждлого такого кластера есть сумарное вермя(Т), то есть для первого кластера это
01.02.09 00:00 - 01.02.09 00:01 (1 минута), для второго кластера это 01.02.09 00:03 - 01.02.09 00:06 (3 минуты)
так вот собственно вопрос, как исключить в конечном результате те кластеры сумарное время которых меньше заданного интервала.
Например для данного набора если задать время T<2 мин. то на выходе получим
4 | 201 | 01.02.09 00:03 | 3 | 0
5 | 201 | 01.02.09 00:04 | 4 | 0
6 | 201 | 01.02.09 00:05 | 5 | 0
7 | 201 | 01.02.09 00:06 | 2 | 0
Спасибо
← →
makz (2009-07-16 18:45) [1]Делайте ХП, или на клиенте. Был бы firebird 2 можно было б помучатся с select"ом.
← →
СовестьДМ © (2009-07-16 19:51) [2]пересмотреть своё вИденье структуры таблицы
а впредь читать наизусть принципы построения реляционных БД
← →
Tonich (2009-07-16 20:28) [3]makz (16.07.09 18:45) [1]
да пришлось так и сделать (
СовестьДМ © (16.07.09 19:51) [2]
ну тогда примера ради, подскажите вид таблицы в данном случаи...
задача такая , есть ряд устройств которые читаются на клиенте, раз в минуту необходимо сохранять показания с устройств в базе... после чего необходимо делать то что я описал в 1 посте...
← →
Loginov Dmitry © (2009-07-16 22:44) [4]жесть. Имхо, здесь либо всю обработку на клиена повесить, либо переработать структуру базы данных. Например ввести дополнительное поле "номер кластера", добавлять сначала записи, но номер кластера не указывать, а затем, как только встретится SWITCHCOUNT=0, устанавливать всем записям без номера кластера очередной номер кластера.
Тогда запрос очень простой получиться: GROUP BY по номеру кластера с суммированием времени, поиск записи по заданному интервалу времени (можно с помощью HAVING), и у найденной записи берем номер кластера и делаем выборку только по этому номеру.
← →
tonich (2009-07-16 23:03) [5]Loginov Dmitry © (16.07.09 22:44) [4]
Спасибо за идею... )
← →
Кщд (2009-07-17 13:06) [6]>Tonich (16.07.09 15:25)
просто интересно, сработает такое:
select d.*,
(select min(p.dt)
from devicestate p
where p.id <= d.id
and (p.id = (select max(p2.id) + 1
from devicestate p2
where p2.id <= p.id
and p2.switchcount = 0
)
or not exists (select null
from devicestate p2
where p2.id <= d.id
and p2.switchcount = 0
)
)
),
(select max(p.dt)
from devicestate p
where p.id >= d.id
and (p.id = (select min(p2.id) - 1
from devicestate p2
where p2.id > p.id
and p2.switchcount = 0
)
or not exists (select null
from devicestate p2
where p2.id > d.id
and p2.switchcount = 0
)
)
)
from devicestate d
where d.switchcount != 0
← →
Кщд (2009-07-17 13:06) [7]это вопрос)
← →
Кщд (2009-07-17 13:29) [8]
> Loginov Dmitry © (16.07.09 22:44) [4]
>
> Имхо, здесь либо всю обработку на клиена повесить
в IB есть хранимые процедуры - к чему здесь клиент?
> либо переработать структуру базы данных. Например ввести
> дополнительное поле "номер кластера", добавлять сначала
> записи, но номер кластера не указывать, а затем, как только
> встретится SWITCHCOUNT=0, устанавливать всем записям без
> номера кластера очередной номер кластера.
номер кластера надо присваивать сразу, иначе открытый(для которого нет терминирующий записи со switchcount=0) интервал не получим(придется дописывать SQL специальным условием для открытого интервала, что не очень-то красиво)
← →
tonich (2009-07-17 14:16) [9]
> Кщд (17.07.09 13:06) [7]
ну у меня повис это запрос...
← →
Кщд (2009-07-17 14:23) [10]>tonich (17.07.09 14:16) [9]
значит, парсер прожевал
дело за малым - расставить индексы
← →
tonich (2009-07-17 17:04) [11]Спасибо всем....... )
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2010.11.21;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c