|
Статистика... Как?
|
|||
---|---|---|---|
#18+
Приветствую вас, мудрые У... Задачка такая вот... Есть небольшое кол-во клиентов (40 000). И имеют они свойство миграции, т. е. по причине неоплаты мы их отключаем, и так далее. Есть таблица, которая все это движение фиксирует, а имнно - номер клиента, дату отключения (подключения), состояние нынешнее, состояние предыдущее. И вот тут... При запросе надо откинуть тех, у кого было так: 2000.12.05 переведен из подключенных в отключенных по причине неуплаты, а 2000.12.07 опять из отключенных в подключенных... Вот... прибежал, расплакался, денежку зплатил, сказал, что больше так небудет. Типичный пример абонента кабельного ТВ. Помогите пожалуйста, а? Может кто что нибудь подобное делал? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2001, 12:36 |
|
Статистика... Как?
|
|||
---|---|---|---|
#18+
Вообще-то трудно понять что-же тебе нужно. По-моему если ты сформулируешь, не кого надо "откинуть", а кого всё-таки надо выбрать - то сам всё и напишешь. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2001, 15:05 |
|
Статистика... Как?
|
|||
---|---|---|---|
#18+
это что-то типа системы шумоподавления?... попробуй self-join (жутко полезная штука)... нечто вроде select {field list} from {SameTable} as T1 inner join {SameTable} as T2 where T1.UserID=T2.UserID and T1.NewStatus=1 and T2.NewStatus=0 and datediff(day, T2.OperationDate, T1.OperationDate) > @noiselevel and {прочие условия}; вместо параметра/переменной @noiselevel можно просто явно указать минимальное количество дней между датами отключения/подключения. Кроме того есть смысл (зависит от прочих условий) задать максимальное количество дней между датами (используй between). Предупреждаю что оптимизатор на этом запросе точно ласты завернет.... хотя 40 килострок в квадрате - не проблема если колонка UserID проиндексирована, конечно, ну и для прочих условий лучше все что надо тоже проиндексировать (индекс по OperationDate тоже слегка поможет) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2001, 16:30 |
|
Статистика... Как?
|
|||
---|---|---|---|
#18+
Задачу я понял так: есть таблица T - подключения и отключения клиентов с полями: UserID --номер клиента, Date -- дату отключения (подключения), NewStatus --состояние нынешнее (0,1), OldStatus --состояние предыдущее(0,1) Необходимо выбрать клиентов, которыt за период с @a до @b не были отключены и повторно подключены Select t.UserID From T t Where Not exists ( select * from From T t1, T t2 where t.UserID=t1.UserID and t.UserID=t2.UserID and @a<=t1.Date and t1.Date<=t2.Date and t2.Date<=@b and t1.NewStatus=0 and t2.NewStatus=1 ) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2001, 18:49 |
|
|
start [/forum/topic.php?fid=46&msg=32001586&tid=1827469]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
others: | 252ms |
total: | 376ms |
0 / 0 |