Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Сравнить строки одного стоблца  [new]
NekEat
Member

Откуда:
Сообщений: 56
Доброго времени суток
- Есть БД SQL 2005
- Есть IP АТС, которая складывает туда данные от статусах сотрудников

0 Отключен
1 Готов
2 Перерыв
3 Нет на месте
5 Занят
6 Зарезервирован
7 Без телефона

Интересно лишь "2" - перерыв. но не всё так просто:
Данные складываются по очереди, т.е. пользователь ушёл на перерыв, в БД проставилось значение 2 и время смены статуса, затем, когда он возвращается в статус "1" (готов) в БД записывается время изменения статуса (столбец timechange, тип datetime)

Каким образом вычислить время нахождения в перерыве для каждого пользователя (столбец userid, тип uniqieidentifier)?
Интервал, в котором будет вычисляться время нахождения в перерыве задаётся встроенными в АТС средствами (условно говоря: where timechange between @start and @end, где start и end внутренние переменные АТС)

К сообщению приложен файл. Размер - 129Kb
27 апр 12, 11:42    [12478662]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строки одного стоблца  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
select
 t1.UserID,
 sum(datediff(s, t1.TimeChange, isnull(t2.TimeChange, t1.TimeChange)))
from
 MyTable t1 outer apply
 (select top (1) TimeChange from MyTable where UserID = t1.UserID and State = 1 and TimeChange > t1.TimeChange order by TimeChange) t2
where
 t1.State = 2
group by
 t1.UserID;
27 апр 12, 11:52    [12478742]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строки одного стоблца  [new]
NekEat
Member

Откуда:
Сообщений: 56
Что-то не клеится :-((

Таблица называется A_UserStateTypes

select
 t1.UserID,
 sum(datediff(s, t1.TimeChange, isnull(t2.TimeChange, t1.TimeChange)))
from
 A_UserStateTypes t1 outer apply
 (select top (1) TimeChange from A_UserStateTypes where UserID = t1.UserID and State = 1 and TimeChange > t1.TimeChange order by TimeChange) t2
where
 t1.State = 2
group by
 t1.UserID


Ошибка:
Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'outer'.
Msg 170, Level 15, State 1, Line 6
Line 6: Incorrect syntax near '('.


Ощущение, что sql не в курсе такого синтаксиса... версия 8.0.2039
27 апр 12, 12:18    [12478936]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строки одного стоблца  [new]
Glory
Member

Откуда:
Сообщений: 104751
NekEat
Ощущение, что sql не в курсе такого синтаксиса... версия 8.0.2039

Это SQL2000
А не "Есть БД SQL 2005"
27 апр 12, 12:19    [12478940]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строки одного стоблца  [new]
NekEat
Member

Откуда:
Сообщений: 56
упс... мои извинения за то, что ввёл в заблуждение
27 апр 12, 12:20    [12478946]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строки одного стоблца  [new]
iljy
Member

Откуда:
Сообщений: 8711
NekEat,

https://www.sql.ru/forum/actualthread.aspx?tid=935354
27 апр 12, 12:40    [12479080]     Ответить | Цитировать Сообщить модератору
 Re: Сравнить строки одного стоблца  [new]
NekEat
Member

Откуда:
Сообщений: 56
спасибо, по аналогии сделал для своего случая
27 апр 12, 15:44    [12480552]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить