Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 обработка дат  [new]
Емельяненко
Guest
Дано таблица1 с периодом дат и суммой:
date1              date2        summa
2009-04-01 2009-04-30 150
2009-05-01 2009-05-31 150
2009-06-01 2009-06-30 150
2009-07-01 2009-07-31 300
2009-08-01 2009-08-31 300
2009-09-01 2009-09-30 300
нужно получить следующий результат:
date1              date2        summa
2009-04-01 2009-06-30 150
2009-07-01 2009-09-30 300
подскажите с чего начать, в какую сторону смотреть
25 ноя 11, 14:55    [11659379]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ето покравтальная сумма или как ?
1. Определить диапазоны
2.написать селект
3. если лень писать - посмотреть FAQ
25 ноя 11, 14:56    [11659401]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Klick
Member

Откуда: Стерлитамак - Москва
Сообщений: 1023
Как примерно задан вопрос так примерно и написалось:
select '20090401' as date2, '20090630' as date1, sum(summa) as summa from table where date1>='20090401' and date2<'20090630'
union all
select '20090701' as date2, '20090930' as date1, sum(summa) as summa from table where date1>='20090701' and date2<'20090930'
25 ноя 11, 15:02    [11659471]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Емельяненко
Guest
это не поквартальная сумма, суть в том, что если у разных периодов дат (в пределах одного года) сумма одинаковая то периоды нужно изменить
25 ноя 11, 15:06    [11659511]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Емельяненко
Guest
в таблице примерно 10000 записей
25 ноя 11, 15:10    [11659556]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Емельяненко
это не поквартальная сумма, суть в том, что если у разных периодов дат (в пределах одного года) сумма одинаковая то периоды нужно изменить


на что именить ??? Вы алгоритм приведите а ?
25 ноя 11, 15:24    [11659694]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Емельяненко
Guest
1. ищем одинаковые суммы в пределах одного года
2. определяем диапазон дат в пределах этой суммы
3. изменяем диапазон дат в пределах этой суммы (оставляем начальный период в поле date1 и конечный период в поле date2) суммы складывать не нужно
25 ноя 11, 15:35    [11659813]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
1. думаю найти одинаковые суммы в пределах года - нет проблемм
2. мин - макс в группе ... но поему при условии не изменяемой суммы должно быть (ну мне так очнеь кажеться)
3. КАК ИЗМЕНЯМ..... + дата , - дата......до какого критерия.... или просто найти первую дату у которой сумма поменялась ????
25 ноя 11, 15:39    [11659850]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
если просто найти след дату у которой другая сумма то ето просто

row_number ()over (partiton by summa , data order by data)

и берете все у кого номер 1
25 ноя 11, 15:41    [11659881]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Емельяненко
Guest
просто найти первую дату у которой сумма поменялась
25 ноя 11, 15:42    [11659886]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
declare @t table (s int, d datetime)
insert into @t (s,d) values(10,'20110101'),(10,'20110102'),(20,'20110104'),(20,'20110105'),(30,'20110110')
;with cte as (
   select
      s, d, N = ROW_NUMBER()over(partition by s order by d)
   from @t
)

select * from cte

для наглядности
25 ноя 11, 15:46    [11659930]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Емельяненко
Guest
спасибо буду пробывать
25 ноя 11, 15:51    [11659986]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Емельяненко,

date1 и date2 какого типа?
25 ноя 11, 15:52    [11660002]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Емельяненко
Guest
datetime
25 ноя 11, 16:09    [11660192]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Емельяненко
datetime
Там ещё и время ненулевое может быть?
25 ноя 11, 16:16    [11660282]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
iap
Емельяненко
datetime
Там ещё и время ненулевое может быть?

:)
25 ноя 11, 16:17    [11660293]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
driverocker
Member

Откуда:
Сообщений: 1
Попробуйте так:

select
(select min(date1) from таблица1 where summa = t.summa),
(select max(date2) from таблица1 where summa = t.summa),
t.summa
from таблица1 t
25 ноя 11, 16:22    [11660345]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Klick
Member

Откуда: Стерлитамак - Москва
Сообщений: 1023
Ну если сервер >=2005

select 
distinct
min(date1) over (partition by summa) as min_date,
max(date2) over (partition by summa) as max_date,
summa
from table
25 ноя 11, 17:43    [11661130]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
Klick
Member

Откуда: Стерлитамак - Москва
Сообщений: 1023
Ну и если datetime тама то уж как его превратить в дату без времени тут в FAQ надо сходить :) Найдете дорогу? :)
25 ноя 11, 17:46    [11661175]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
емельяненко
Guest
время везде нулевое
25 ноя 11, 18:07    [11661380]     Ответить | Цитировать Сообщить модератору
 Re: обработка дат  [new]
емельяненко
Guest
сервер 2005, спасибо за подсказки большое
25 ноя 11, 18:10    [11661407]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить