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

Откуда:
Сообщений: 183
Задача следующая, есть таблица Клиентов у которых есть поля:

ClientId long - id клиента
LeastBayDate datetime - дата последней покупки.

нужно получить recency, которое формулируется следуюшим оброзом.

((сегодняшняя дата - дата последней покупки) в месяцах) mod 3

Тоесть к примеру получили разнизу в [от 0 до 3] месяца то recency = 0,
[4-6] месяца recency = 1,
[7-9] месяца recency = 2
[10-12] месяца recency = 3
...........................
[16-18] месяца recency = 5
..........................
[21-24] месяца recency = 7

и так далее.

Вопрос как такое сделать?
28 авг 09, 17:54    [7592450]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21502
с помощью функции DATEDIFF вычислить разницу между getdate() и последней датой в месяцах, и разделить полученное значение нацело на 3 (FLOAT())

деление по модулю тут не причем
28 авг 09, 17:59    [7592489]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21502
а выбрать последнюю дату:

select Max(LeastBayDate), id
group by id
28 авг 09, 18:01    [7592495]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
Schors
Member

Откуда:
Сообщений: 13
unkis
Задача следующая, есть таблица Клиентов у которых есть поля:

ClientId long - id клиента
LeastBayDate datetime - дата последней покупки.

нужно получить recency, которое формулируется следуюшим оброзом.

((сегодняшняя дата - дата последней покупки) в месяцах) mod 3

Тоесть к примеру получили разнизу в [от 0 до 3] месяца то recency = 0,
[4-6] месяца recency = 1,
[7-9] месяца recency = 2
[10-12] месяца recency = 3
...........................
[16-18] месяца recency = 5
..........................
[21-24] месяца recency = 7

и так далее.

Вопрос как такое сделать?


арифметическое вычитание даст количество дней между датами
как считать месяц? 30 дней?
28 авг 09, 18:01    [7592497]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21502
Schors
арифметическое вычитание даст количество дней между датами
как считать месяц? 30 дней?


DATEDIFF
28 авг 09, 18:03    [7592512]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
Schors
Member

Откуда:
Сообщений: 13
Schors
unkis
Задача следующая, есть таблица Клиентов у которых есть поля:

ClientId long - id клиента
LeastBayDate datetime - дата последней покупки.

нужно получить recency, которое формулируется следуюшим оброзом.

((сегодняшняя дата - дата последней покупки) в месяцах) mod 3

Тоесть к примеру получили разнизу в [от 0 до 3] месяца то recency = 0,
[4-6] месяца recency = 1,
[7-9] месяца recency = 2
[10-12] месяца recency = 3
...........................
[16-18] месяца recency = 5
..........................
[21-24] месяца recency = 7

и так далее.

Вопрос как такое сделать?


арифметическое вычитание даст количество дней между датами
как считать месяц? 30 дней?


или как написали выше DATEDIFF(month, @date1, @date2)
28 авг 09, 18:03    [7592513]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
unkis
Member

Откуда:
Сообщений: 183
Shocker.Pro
с помощью функции DATEDIFF вычислить разницу между getdate() и последней датой в месяцах, и разделить полученное значение нацело на 3 (FLOAT())

деление по модулю тут не причем


На цело тут не олучится. к примеру

[16-18] r=5 ==18/3-1 =5
[19-21] r=6 != 19/3-1 =5

возможно надо округлять, хотя тоже не получится, так как
[7-9] r=2 != round(7/2)-1=3
28 авг 09, 20:15    [7592829]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
unkis
Member

Откуда:
Сообщений: 183
нужно делить на 3 и брать верхню границу, тогда получиться.

это как-то celing или как-то так называеться
28 авг 09, 20:17    [7592831]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21502
FLOOR

Сорри, это я опечатался (написал Float)
28 авг 09, 21:12    [7592882]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 21502
select floor(0/3), floor(1/3), floor(2/3), floor(3/3), floor(4/3), floor(5/3), floor(6/3), floor(7/3)
28 авг 09, 21:14    [7592884]     Ответить | Цитировать Сообщить модератору
 Re: Работа с датами  [new]
vino
Member

Откуда:
Сообщений: 1191
unkis
...((сегодняшняя дата - дата последней покупки) в месяцах) mod 3

Тоесть к примеру получили разнизу в [от 0 до 3] месяца то recency = 0,
[4-6] месяца recency = 1,
[7-9] месяца recency = 2
[10-12] месяца recency = 3
...........................
у деления по модулю появились новые интерпретации????
31 авг 09, 10:25    [7596194]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить