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

Откуда:
Сообщений: 4
Имеется таблица SQL (порядка 3 млн записей) c данными по ежемесячным обращениям клиентов
Идентификацией клиента служит сочетание полей ФИО+Город
(предполагается что 1 ФИО-город может обратиться не более 1 раза в месяц)
Работа идет с 3 полями
- год-месяц обращения в формате ("200801", "200802" ...)
- ФИО клиента (обычное string)
- Город клиента (обычное string)

Требуется для каждой записи таблицы определить число повторов ФИО-Город за прошедшие периоды + текущий период
Если кто сталкивался - помогите, пожалуйста с решением такой задачи
10 окт 11, 16:08    [11413999]     Ответить | Цитировать Сообщить модератору
 Re: счетчик Running totals для совпадений 2 столбцов  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Н264,

Структура таблиц плохая.
Нужно заводить ФИО_ID int, Город_ID int, Дата в формате smalldatetime.
10 окт 11, 16:12    [11414034]     Ответить | Цитировать Сообщить модератору
 Re: счетчик Running totals для совпадений 2 столбцов  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Н264,
SELECT ФИО, Город, COUNT(1) AS SS
FROM tab
GROUP BY ФИО, Город
10 окт 11, 16:20    [11414125]     Ответить | Цитировать Сообщить модератору
 Re: счетчик Running totals для совпадений 2 столбцов  [new]
iljy
Member

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

а нахрена делать отдельную таблицу ФИО? Тогда уж таблица Клиент (ID, ФИО, IDГород) и Город(ID, Город).

Н264,

а в чем проблема-то? накладывайте условие на интервал времени и делайте группировку.
10 окт 11, 16:20    [11414134]     Ответить | Цитировать Сообщить модератору
 Re: счетчик Running totals для совпадений 2 столбцов  [new]
Н264
Member

Откуда:
Сообщений: 4
iljy,
Периодов времени 36 - то есть для каждого из них нужно накладывать условие
Честно говоря я не совсем представляю как это реализовать в форме скрипта

то есть скажем в 3 периоде надо смотреть на предыдущие 2
в 35 периоде - на предыдущие 34
и это все для каждой записи
10 окт 11, 16:30    [11414256]     Ответить | Цитировать Сообщить модератору
 Re: счетчик Running totals для совпадений 2 столбцов  [new]
iljy
Member

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

вам накопительный итог чтоли нужен? Тогда вам в ФАК.
10 окт 11, 16:34    [11414317]     Ответить | Цитировать Сообщить модератору
 Re: счетчик Running totals для совпадений 2 столбцов  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Н264,

автор
Периодов времени 36

Это дни или недели?
автор
в 3 периоде

Тоже не понятно.
10 окт 11, 16:36    [11414344]     Ответить | Цитировать Сообщить модератору
 Re: счетчик Running totals для совпадений 2 столбцов  [new]
Н264
Member

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

Это месяцы
10 окт 11, 16:40    [11414391]     Ответить | Цитировать Сообщить модератору
 Re: счетчик Running totals для совпадений 2 столбцов  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Н264,

Т.е. для каждой (пары ФИО + Город) даты показывать повторы, за последние 36 месяцев.
SELECT tab.ФИО, tab.Город, tab.Дата, mm2.SS
FROM tab
LEFT JOIN
(SELECT ФИО, Город, COUNT(1) AS SS
FROM tab grt
WHERE CONVERT(SMALLDATETIME,grt.Дата +'01') = CONVERT(SMALLDATETIME,tab.Дата +'01')
BETWEEN Dateadd(mm,-36,CONVERT(SMALLDATETIME,grt.Дата +'01')) AND CONVERT(SMALLDATETIME,grt.Дата +'01')
GROUP BY grt.ФИО, grt.Город

) mm2 ON tab.ФИО =mm2.ФИО AND tab.ФИО =mm2.ФИО AND tab.Город =mm2.Город		
	/*AND CONVERT(SMALLDATETIME,tab.Дата +'01') = CONVERT(SMALLDATETIME,mm2.Дата +'01') */
Немного сомневаюсь, верно ли написал коррелированный подзапрос?
10 окт 11, 17:23    [11414925]     Ответить | Цитировать Сообщить модератору
 Re: счетчик Running totals для совпадений 2 столбцов  [new]
Н264
Member

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

Спасибо за ответ - left join - как раз то, что надо
все получилось достаточно просто

SELECT A.[Клиент],A.[Город],A.[Месяц],count(*) as SS
FROM [MODEL].[dbo].[fact_TABLE] as A
left join [MODEL].[dbo].[fact_TABLE] as B
on A.[Клиент]=B.[Клиент] and A.[Город]=B.[Город] and A.[Месяц]>=B.[Месяц]
Group by A.[Клиент],A.[Город],A.[Месяц]
order by [Клиент],[Месяц]
10 окт 11, 17:43    [11415132]     Ответить | Цитировать Сообщить модератору
 Re: счетчик Running totals для совпадений 2 столбцов  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Н264,

Не вижу в коде этого условия
то есть скажем в 3 периоде надо смотреть на предыдущие 2
10 окт 11, 17:51    [11415209]     Ответить | Цитировать Сообщить модератору
 Re: счетчик Running totals для совпадений 2 столбцов  [new]
Glory
Member

Откуда:
Сообщений: 104751
trew
Не вижу в коде этого условия
то есть скажем в 3 периоде надо смотреть на предыдущие 2

Тут не для каждого 3го, а для 3го по возростанию
10 окт 11, 18:00    [11415270]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить