Может будут у кого умные мысли по этому поводу...?
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Может будут у кого умные мысли по этому... Expand / Collapse
Автор
Сообщение
31.07.2007 17:07
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 06.09.2007 10:37
Сообщ.: 7, Visits: 32
Задача следущая:

есть табличка статистики. в ней есть поле типа действия, даты и времени, когда данное действие было совершено..Как выбрать из неё все поля со значением типа действия = 1 и предшествующим действием?

т.е. к примеру есть событие 22/11/2005 ( пользователь с айдишником 32 что-либо сделал)и тип действия равен , к примеру, 5

и есть событие 24/11/2005 ( пользователь с айдишником 32 что-либо сделал) с типом 1... между этими записями может быть всё, что угодно...

как заставить sql выдать только эти 2 строки и нничего более?

Может кто-нибудь подскажет, как это сделать одним запросом?

Сообщ. #915067
31.07.2007 17:15
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Отбор по ID юзера не подходит? Вроде SELECT * FROM stat WHERE iUser_ID=32 ORDER BY [Date].
Сообщ. #915068
01.08.2007 9:24
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 06.09.2007 10:37
Сообщ.: 7, Visits: 32
в этом случае выберутся все события, а мне нужны только с айди 1 и событие перед оным...
Сообщ. #915081
01.08.2007 10:04
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.07.2008 10:37
Сообщ.: 236, Visits: 1 734
Можно попробовать так:

SELECT TOP 2 (*)
FROM    stat
WHERE  ( iUser_ID = 32 )
            and
           ( [Date] <= 'моядата' )
ORDER BY [Date] Desc
Сообщ. #915082
01.08.2007 10:28
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 06.09.2007 10:37
Сообщ.: 7, Visits: 32
имеет право на существование, но всё равно не то...

ведь записей может быть много...допустим 11/11/2007 пользователь зашёл...т.е. ид события 1, потом что-то поделал и вышел 12/11/2007 грубо говоря....потом зашёл 15/11/2007....

и надо выбрать какраз-таки все входы и события, им предшествующие

Сообщ. #915083
01.08.2007 12:06
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Не уверен что это лучшее решение, но вроде работает:

create table #t1
(
[id] int primary key identity(1,1),
iEvent_ID int not null,
iUser_ID int not null,
dtWhen datetime NOT NULL,
)
insert into #t1 values (3, 32, '20051125')
insert into #t1 values (1, 32, '20051124')
insert into #t1 values (4, 31, '20051121')
insert into #t1 values (5, 32, '20051122')
-- Запрос
select * from #t1
where [id] = (SELECT TOP 1 [id] FROM #t1 WHERE iUser_ID=32 AND iEvent_ID=1 ORDER BY dtWhen DESC)
or [id] = (SELECT TOP 1 [id] FROM #t1 WHERE iUser_ID=32 AND dtWhen<(SELECT TOP 1 dtWhen FROM #t1 WHERE iUser_ID=32 AND iEvent_ID=1 ORDER BY dtWhen DESC))
----------------
drop table #t1

Сообщ. #915088
02.08.2007 15:57
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 06.09.2007 10:37
Сообщ.: 7, Visits: 32
спасибо за советы всем) но решил сделать проще)

создать темповую табличку и заполнить её с помощью курсора)

т.е. ставить у всех полей с айди эвента = 1 курсор, и записывать его и предыдущее значение в темп табличку) в итоге результат оказался таким, каким нужен был)

Сообщ. #915122
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl, Alexey Spirin

Время GMT +3:00, Сейчас 12:05