Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.21;
Скачать: CL | DM;

Вниз

Задачка 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
14-68557
Рыжий Вася
2003-08-02 10:14
2003.08.21
Проверка в английском Word е


14-68457
` frizZ. `
2003-08-04 16:13
2003.08.21
php


3-68209
www
2003-07-25 14:54
2003.08.21
Программа использ. БД, зарег. в BDE не работает на др. компах


3-68173
Dec
2003-07-27 01:17
2003.08.21
Динамически создаваемыеTTable


9-68136
GameBoy
2003-02-22 20:30
2003.08.21
Траканы