|
|
|
новичок
      
участник
Last Login: 06.09.2007 10:37
Сообщ.: 7,
Visits: 32
|
|
| Задача следущая: есть табличка статистики. в ней есть поле типа действия, даты и времени, когда данное действие было совершено..Как выбрать из неё все поля со значением типа действия = 1 и предшествующим действием? т.е. к примеру есть событие 22/11/2005 ( пользователь с айдишником 32 что-либо сделал)и тип действия равен , к примеру, 5 и есть событие 24/11/2005 ( пользователь с айдишником 32 что-либо сделал) с типом 1... между этими записями может быть всё, что угодно... как заставить sql выдать только эти 2 строки и нничего более? Может кто-нибудь подскажет, как это сделать одним запросом?
|
|
|
|
|
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].
|
|
|
|
|
новичок
      
участник
Last Login: 06.09.2007 10:37
Сообщ.: 7,
Visits: 32
|
|
| в этом случае выберутся все события, а мне нужны только с айди 1 и событие перед оным...
|
|
|
|
|
Supreme 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
|
|
|
|
|
новичок
      
участник
Last Login: 06.09.2007 10:37
Сообщ.: 7,
Visits: 32
|
|
| имеет право на существование, но всё равно не то... ведь записей может быть много...допустим 11/11/2007 пользователь зашёл...т.е. ид события 1, потом что-то поделал и вышел 12/11/2007 грубо говоря....потом зашёл 15/11/2007.... и надо выбрать какраз-таки все входы и события, им предшествующие
|
|
|
|
|
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
|
|
|
|
|
новичок
      
участник
Last Login: 06.09.2007 10:37
Сообщ.: 7,
Visits: 32
|
|
| спасибо за советы всем) но решил сделать проще) создать темповую табличку и заполнить её с помощью курсора) т.е. ставить у всех полей с айди эвента = 1 курсор, и записывать его и предыдущее значение в темп табличку) в итоге результат оказался таким, каким нужен был)
|
|
|
|