Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
6-68434
muzik
2003-06-17 11:37
2003.08.21
Хреньтипа ReGet!


3-68210
Magic&Wizard
2003-07-28 11:24
2003.08.21
FireBird 1.5 vs InterBase 7.0


14-68466
kati
2003-08-06 10:38
2003.08.21
Прикладная ошибка


1-68289
Micah'GF
2003-08-06 16:57
2003.08.21
Избавиться от мигания TImage


14-68493
Evg12
2003-08-06 02:46
2003.08.21
А видал ли кто компонент такой?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский