Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.08.2013, 17:00   #1
denis_stell
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 21
По умолчанию две таблицы, перенести суммы,запрос

Добрый день, подскажите пожалуйста
есть таблица состоит из след.полей
счет - дата - остаток (сумма)
и есть таблица календарь, состоит из одного поля дата
возникла необходимость считать средневзвешенное по остаткам клиентов/по счетам.формула такова, суммируются все суммы и делаться на факт. кол-во дней.
но в базе ms sql остатки есть, например
40502% - 2013-06-28 - 1000
40502% - 2013-07-01 - 4500
40502% - 2013-07-02 -1000
40502% - 2013-07-05 -1200
так вот
в другой таблицы есть даты
2013-06-28
2013-06-29
2013-06-30
2013-07-01
.....
....
....
так вот нужно получить,что то подобное
40502% - 2013-06-28 - 1000
40502% - 2013-06-29 - 1000
40502% - 2013-06-30 - 1000
40502% - 2013-07-01 - 4500
40502% - 2013-07-02 -1000
40502% - 2013-07-03 -1000
40502% - 2013-07-04 -1000
40502% - 2013-07-05 -1200
как написать запрос с вставкой в таблицу, где нет дат с суммами.
а сумма должна равняться предыдущей
denis_stell вне форума Ответить с цитированием
Старый 21.08.2013, 17:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Из того что понял:
Код:
Select счет,
 (select sum(остаток) from таблица t1 where t1.счет=t0.счет)/
 (select count(дата) from (select дата from таблица t1 where t1.счет=t0.счет group by дата))
from t0 таблица 
group by 1
А понял я скорее всего ничего...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.08.2013, 17:53   #3
denis_stell
Пользователь
 
Регистрация: 03.03.2010
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Из того что понял:
Код:
Select счет,
 (select sum(остаток) from таблица t1 where t1.счет=t0.счет)/
 (select count(дата) from (select дата from таблица t1 where t1.счет=t0.счет group by дата))
from t0 таблица 
group by 1
А понял я скорее всего ничего...
спасибо за ответ, но это не то.
1) Есть таблица t1 состоит из одного поля datetime
2) Есть таблица t2 состоит из полей дата(datetime),acc(счет),restrub(ос таток)
t2 таблица в которой хранятся остатки и обороты по счетам,все бы хорошо,но данных по всем датам нет,только те обороты когда клиент делал операцию, пример приводил выше, остаток был на 28 июня, затем 1,2 затем 5(т.е. нет данных на 3,4 июля).
Стало необходимо считать средневзвешенные
сумма остатков за каждый день/ количество факт.дней.
если считать по таблице t2 то данные получаются кривыми.
добавил таблицу - календарь(t1), в которой хранятся только даты(все в каждом месяце)
мне нужно дополнить таблицу t2 из t1, т.е. даты которых нет в основной таблице и суммы,но сумма должна юыть равна предуыдущей.
примеру, добавляется 29 число в t2, остаток = 28 числу, затем добавляю 30 остаток равен 29. затем нужно добавить 3 июля и сумму равной 2 июля, затем добавить 4 июля, а сумма будет равна 3 июля

Последний раз редактировалось denis_stell; 21.08.2013 в 18:00.
denis_stell вне форума Ответить с цитированием
Старый 22.08.2013, 10:26   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

1. есть таблица с датами.
Цитата:
добавил таблицу - календарь(t1), в которой хранятся только даты(все в каждом месяце)
2. надо для ВСЕХ этих дат посчитать какие-то остатки. по правилу.
если дата есть в таблице счетов, то берем (считаем) оттуда, иначе берем данные за ближайшую прошедшую дату.
Цитата:
мне нужно дополнить таблицу t2 из t1, т.е. даты которых нет в основной таблице и суммы,но сумма должна юыть равна предуыдущей.
Верно?

Код:
1. select d , (select max(d) from t2 where t2.d<=t1.d) as rd -- для каждого дня узнаем последний день когда были операции ( <= они могут совпасть! )
from t1
Код:
2. select d, sum(s) as s from t2 group by d --здесь правило расчета сумм за реальный день (день с операциями)
теперь соединяем
Код:
3. select d, s
   from ( select d , (select max(d) from t2 where t2.d<=t1.d) as rd -- для каждого дня узнаем последний день когда были операции ( <= они могут совпасть! )
          from t1 ) as td
   left join (select d, sum(s) as s from t2 group by d ) as ts on ts.d=td.rd --присоединяем по дате реальных операций !
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 22.08.2013 в 10:34.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
MS SQL SERVER 2005 копирование таблицы из ОДНОЙ БД В другую или перенести все строки из одной таблицы в другую reihtmonbern БД в Delphi 4 17.07.2012 23:25
перенести данные с одной таблицы в другую Natashka Milashka SQL, базы данных 4 05.06.2012 14:02
Перенести запись из одной таблицы dbf в другую FleshDro SQL, базы данных 7 06.08.2009 13:00
Перенести таблицы Экселя в Ворд Nash1 Фриланс 5 02.07.2009 09:46
Через запрос перенести данные с 6 таблиц Таня84 БД в Delphi 5 22.03.2007 15:46