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

Откуда:
Сообщений: 10
Здравствуйте, как изящно можно сделать view, которое делает следущее
имеем таблицу

Date smalldatetime
ID int

значения:

Date 20080131, ID 1
Date 20080228, ID 2
Date 20080331, ID 3
Date 20090131, ID 4
Date 20090228, ID 5
Date 20090331, ID 6

View должно выдавать следущее:

Date 20080131, ID 1
Date 20090131, ID 4
Date 20080231, ID 1
Date 20080231, ID 2
Date 20090231, ID 4
Date 20090231, ID 5
Date 20080331, ID 1
Date 20080331, ID 2
Date 20080331, ID 3
Date 20090331, ID 4
Date 20090331, ID 5
Date 20090331, ID 6

То есть наращивать ID с начала года.
25 дек 09, 14:08    [8118807]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
ничего не понял
что значит
FunbI4
наращивать ID с начала года.
?
не могли бы Вы по-русски, по шагам написать алгоритм - что должен делать запрос?

И куда делась запись
Date 20090228, ID 5
?
25 дек 09, 14:16    [8118860]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
Anddros
Member

Откуда:
Сообщений: 1077
declare @t table (date smalldatetime, id int)
insert @t select '20080131',1
union all select '20080228',2
union all select '20080331',3
union all select '20080131',4
union all select '20080228',5
union all select '20080331',6

select distinct t1.date, t2.id
from @t t1 
inner join @t t2 on t2.date<=t1.date
25 дек 09, 14:19    [8118898]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
это дата?
20080231

в феврале уже 31 день оказывается аж с 2008 года , а мы то не в курсе
25 дек 09, 14:20    [8118915]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
FunbI4
Member

Откуда:
Сообщений: 10
Паганель
ничего не понял
что значит
FunbI4
наращивать ID с начала года.
?
не могли бы Вы по-русски, по шагам написать алгоритм - что должен делать запрос?

И куда делась запись
Date 20090228, ID 5
?

Сори. В феврале, конечно, дата - 28, а не 31, как я написал...
Вот тут:
Date 20080231, ID 1
Date 20080231, ID 2
Date 20090231, ID 4
Date 20090231, ID 5


Попробую объяснить.
Есть определенное чисто записей за за каждый месяц (помесячно).
Мне нужно, чтобы:
месяц январь включал все записи (ID) января текущего года
февраль все записи января текущего года, февраля текущего года (ID января + ID февраля)
март все записи января текущего года, февраля текущего года и марта текущего года.
25 дек 09, 14:25    [8118963]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
FunbI4
Member

Откуда:
Сообщений: 10
TO Anddros:

Число месяцев и лет не ограничено.
Со временем будут появляться данные за новые месяца.
25 дек 09, 14:28    [8118994]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
FunbI4
месяц январь включал все записи (ID) января текущего года
Месяц не может ничего включать
Запрос может группировать данные, сортировать, как-то преобразовывать...

Я спрашивал, что должен делать запрос
По-русски, пожалуйста, и по шагам
25 дек 09, 14:31    [8119018]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
Anddros
Member

Откуда:
Сообщений: 1077
FunbI4
TO Anddros:

Число месяцев и лет не ограничено.
Со временем будут появляться данные за новые месяца.

До 2178-го года хватит? :)
declare @t table (date smalldatetime, id int)
insert @t select '20080131',1
union all select '20080228',2
union all select '20080331',3
union all select '20080131',4
union all select '20080228',5
union all select '20080331',6

select dateadd(mm,number,'20080102')-1 date, t.id 
from master..spt_values
inner join @t t on t.date<dateadd(mm,number,'20080102')
where type='P'
order by date,id
25 дек 09, 14:35    [8119047]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
FunbI4
Member

Откуда:
Сообщений: 10
Anddros

До 2178-го года хватит? :)


Я наверно не умею объяснять :(

Количество идентификаторов (ID) за каждый месяц исчисляется миллионами.
Это я для примера расписал для шести.
25 дек 09, 15:03    [8119342]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
iap
Member

Откуда: Москва
Сообщений: 46975
FunbI4
Количество идентификаторов (ID) за каждый месяц исчисляется миллионами.
То есть, в результате должны получиться миллионы миллионов строк?
Ведь, если не ошибаюсь, январские строки должны быть продублированы в феврале, марте, ..., декабре,
февральские - в марте, апреле, ..., декабре и т.д.?
25 дек 09, 15:19    [8119449]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
FunbI4
Member

Откуда:
Сообщений: 10
То есть, в результате должны получиться миллионы миллионов строк?
Ведь, если не ошибаюсь, январские строки должны быть продублированы в феврале, марте, ..., декабре,
февральские - в марте, апреле, ..., декабре и т.д.?

Именно.

Это нужно для OLAP куба.
Чтоб проваливаться в определенном месяце (Drillthrough) и видеть идентификаторы нарастающим за предыдущие месяца.
Но поскольку в MDX я пока не очень силен, то таблицу фактов решил наполнить вот таким способом.
25 дек 09, 15:26    [8119486]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
что-то вы явно не так хотите сделать.
25 дек 09, 15:28    [8119495]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
FunbI4
Member

Откуда:
Сообщений: 10
iap
То есть, в результате должны получиться миллионы миллионов строк?

Если быть точнее, то сотня миллионов за год.
в январе 2008 - 2 миллиона, в феврале 2008 - 4, в марте 2008 - 6 в апреле - 8 и т.д.
Со следущего года все идет с начала года
в январе 2009 - 3 миллиона, в феврале 2009 - 6, в марте 2009 - 9 в апреле - 12 и т.д.
25 дек 09, 15:30    [8119511]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
FunbI4
Member

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

Обрисую реальную ситуацию.
Есть банковский счет.
Периодически (в течении года) на этот счет падают определенные суммы.
Цель в OLAP кубе кликнув на сумму определенного месяца увидеть перечень всех поступлений на счет с начала года.
25 дек 09, 15:34    [8119527]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
как на меня ето дожні біть 2 куба связіне, и по клику ві должні проваливаться в другой, иначе пересчет куба на таблице факто такого размера - не хватит не одного вервера
-------------------------------------
Jedem Das Seine
25 дек 09, 15:35    [8119533]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
простите но причём тут тогда ваш вопрос про дублирование данных?
ваша задача должна решаться исключительно средствами вашего OLAP-сервиса
25 дек 09, 15:35    [8119535]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
FunbI4
Member

Откуда:
Сообщений: 10
Konst_One
простите но причём тут тогда ваш вопрос про дублирование данных?
ваша задача должна решаться исключительно средствами вашего OLAP-сервиса

Согласен.
Но как писал выше. В OLAP пока не гуру.
25 дек 09, 15:42    [8119571]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
Konst_One
Member

Откуда:
Сообщений: 11513
может стоит задать более конкретный вопрос в форуме по OLAP с указанием каким средством для OLAP вы пытаетесь решить свою проблему
25 дек 09, 15:44    [8119578]     Ответить | Цитировать Сообщить модератору
 Re: Нарастающий итог  [new]
Fripp
Member

Откуда:
Сообщений: 12
Если подразумевается MSAS, то в MDX есть функция PeriodsToDate, которая считает н.и. по времени с начала периода.
25 дек 09, 17:28    [8120201]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить