Форум: "Базы";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];
ВнизЗадачка SQL-щикам! Возможно ли следующее одним SQL запросом.. Найти похожие ветки
← →
Vorobyev Sergey (2003-07-25 15:13) [0]Привет всем!
Есть таблица ведения лога польователей (зашел, вышел) (ЭТО ТОЛЬКО ПРИМЕР)
----------------------------------------------
name action date
----------------------------------------------
alex enter 8:00
maxim enter 8:15
alex quit 8:30
den enter 9:00
sega enter 9:02
mega enter 9:15
sega quit ( без использования хранимых процедур)Привет всем!
Есть таблица ведения лога польователей (зашел, вышел) (ЭТО ТОЛЬКО ПРИМЕР)
----------------------------------------------
name action date
----------------------------------------------
alex enter 8:00
maxim enter 8:15
alex quit 8:30
den enter 9:00
sega enter 9:02
mega enter 9:15
sega quit 9:30
и т.д.
----------------------------------------------
ВОПРОС:
1. Возможно ли одним запросом (без использования хранимых процедур) получить список работающих пользователей на конкретное время, т.е. например на 9:01 это будет:
----------------------------------------------
name action date
----------------------------------------------
maxim enter 8:15
den enter 9:00
----------------------------------------------
2. Если это возможно, то не будет ли этот запрос долго-исполняемым, например для таблицы с 100000 записей
--
Спасибо
← →
Reindeer Moss Eater (2003-07-25 15:22) [1]select * from Table T1
where T1.action = "enter" and T1.date < Needed_Date
and not exists(select null from Table T2 where T2.action = "quit" and T2.Date > T1.Date and T2.Name = T1.Name)
← →
Vorobyev Sergey (2003-07-25 15:32) [2]
> Reindeer Moss Eater (25.07.03 15:22)
Спасибо!
Вся фишка была в EXISTS :-)
ВЫВОД: надо хорошо знать SQL
P.S. Правда этот запрос выполняется долго, мой вариант с хранимыми процедурами работает быстрее
← →
Соловьев (2003-07-25 15:51) [3]
select name, max(date)
from t1
where action<>"quit" and date>need_date
group by name
← →
Reindeer Moss Eater (2003-07-25 16:02) [4]И что же оно покажет?
Последние логоны клиентов, произошедшие после какого-то момента времени?
Как это к вопросу относится?
← →
Vorobyev Sergey (2003-07-25 16:11) [5]Вот, я сам решил задачу без EXISTS
И запрос выполняется быстро..
select name, max(date) from log_table a
where code="enter"
group by name
having
(max(date) > (select max(date) from log_table a2
( select max(date)Вот, я сам решил задачу без EXISTS
И запрос выполняется быстро..
select name, max(date) from log_table a
where code="enter"
group by name
having
(max(date) > (select max(date) from log_table a2
where code="quit" and a2.name = a.name))
or
(select max(date) from log_table a2
where code="quit" and a2.name = a.name) is null
← →
Vorobyev Sergey (2003-07-25 16:16) [6]Корректировка..
Этот запрос - для текущего момента времени, ну а для любого конкретного момента времени просто надо добавить
... where code="enter" and date<:required_date
group by name..
, то же для внутреннего подзапроса
← →
ZrenBy (2003-07-25 16:39) [7]2 select
select L.name, L.date from log_table L
inner join
(
select name, date = max(date) from log_table where date < :rd group by name
)T
on T.name = L.name and T.date=L.date
where L.code = "enter"
← →
Соловьев (2003-07-28 10:12) [8]Сорри за не точный ответ, вот такой должен работать:
select t1.name, max(t1."date")
from test t1
where t1."date">=need_date
group by t1.name
having (count(t1.action)<2)
← →
к (2003-07-28 14:14) [9]у
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.08.21;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.008 c