Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Остатки по дням / 14 сообщений из 14, страница 1 из 1
05.12.2019, 15:18
    #39898650
hotcolt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
Добрый день, подскажите как решить задачу,пожалуйста!
Я только начал пользоваться SQL, буду очень признателен за помощь.
Есть таблица содержащая остаток товаров в магазинах каждое первое число месяца( у этих строк признак 1) и в ней же все движение по датам (+ и -) (у этих строк признак 0) , нужно получить таблицу с остатком на каждый день.

Спасибо!
...
Рейтинг: 0 / 0
05.12.2019, 15:59
    #39898687
WarAnt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
hotcolt,

и что не получается?
простейший вариант использования оконной версии sum()
...
Рейтинг: 0 / 0
05.12.2019, 16:12
    #39898699
hotcolt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
WarAnt,
Можно пример написать. Мне предлагают циклом просто решать.
...
Рейтинг: 0 / 0
05.12.2019, 17:17
    #39898748
WarAnt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
hotcolt,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
declare @t table (date date, value float)

insert @t
values 
('20191101', 444),
('20191102', 2),
('20191103', 2),
('20191104', 1),
('20191105', 1),
('20191106', 4),
('20191107', 8),
('20191201', 500),
('20191202', 3),
('20191203', 4),
('20191204', 5),
('20191205', 3),
('20191206', 5),
('20191207', 8)

SELECT *, sum(value) over (partition by year(date), month(date) ORDER by date) 
FROM @t
...
Рейтинг: 0 / 0
05.12.2019, 17:18
    #39898750
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
WarAnt, т.к. изменения могут быть не каждый день, нужно ещё таблицу-календарь присоединить.
...
Рейтинг: 0 / 0
05.12.2019, 18:01
    #39898782
WarAnt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
Minamoto
WarAnt, т.к. изменения могут быть не каждый день, нужно ещё таблицу-календарь присоединить.


это вы ТСу советуйте мне и так понятно:)), я просто нарисовал пример использования оконной функции
...
Рейтинг: 0 / 0
06.12.2019, 11:09
    #39898985
hotcolt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
WarAnt,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
CONVERT (datetime,convert(char(8),DATE_CALC_INT)) AS RealDate ,
MONTH(CONVERT (datetime,convert(char(8),DATE_CALC_INT))) AS RealMonth,
PHARMACY_ID,
PRODUCT_ID,
QUNTITY,
SUM(QUNTITY) OVER (PARTITION BY PHARMACY_ID, PRODUCT_ID, MONTH(CONVERT (datetime,convert(char(8),DATE_CALC_INT)))
ORDER BY CONVERT (datetime,convert(char(8),DATE_CALC_INT)) ,IS_RST DESC) AS OSTATKI,IS_RST
FROM [ANALYTICS_DEPARTMENT_DB].[FTT\k.chepurko].[Fact_Exc_StockMove]
ORDER BY CONVERT (datetime,convert(char(8),DATE_CALC_INT))  



Вот так вот ?
...
Рейтинг: 0 / 0
06.12.2019, 11:54
    #39899011
WarAnt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
hotcolt
WarAnt,

SELECT
CONVERT (datetime,convert(char(8),DATE_CALC_INT)) AS RealDate ,
MONTH(CONVERT (datetime,convert(char(8),DATE_CALC_INT))) AS RealMonth,
PHARMACY_ID,
PRODUCT_ID,
QUNTITY,
SUM(QUNTITY) OVER (PARTITION BY PHARMACY_ID, PRODUCT_ID, MONTH(CONVERT (datetime,convert(char(8),DATE_CALC_INT)))
ORDER BY CONVERT (datetime,convert(char(8),DATE_CALC_INT)) ,IS_RST DESC) AS OSTATKI,IS_RST
FROM [ANALYTICS_DEPARTMENT_DB].[FTT\k.chepurko].[Fact_Exc_StockMove]
ORDER BY CONVERT (datetime,convert(char(8),DATE_CALC_INT))

Вот так вот ?


так или не так, вам должно быть виднее по результату работы запроса:)
...
Рейтинг: 0 / 0
06.12.2019, 13:50
    #39899074
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
WarAnt
hotcolt
WarAnt,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
CONVERT (datetime,convert(char(8),DATE_CALC_INT)) AS RealDate ,
MONTH(CONVERT (datetime,convert(char(8),DATE_CALC_INT))) AS RealMonth,
PHARMACY_ID,
PRODUCT_ID,
QUNTITY,
SUM(QUNTITY) OVER (PARTITION BY PHARMACY_ID, PRODUCT_ID, MONTH(CONVERT (datetime,convert(char(8),DATE_CALC_INT)))
ORDER BY CONVERT (datetime,convert(char(8),DATE_CALC_INT)) ,IS_RST DESC) AS OSTATKI,IS_RST
FROM [ANALYTICS_DEPARTMENT_DB].[FTT\k.chepurko].[Fact_Exc_StockMove]
ORDER BY CONVERT (datetime,convert(char(8),DATE_CALC_INT))  



Вот так вот ?


так или не так, вам должно быть виднее по результату работы запроса:)
...
Рейтинг: 0 / 0
06.12.2019, 16:30
    #39899200
hotcolt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
Увы, нет, так считает только по датам когда было движение, и на первые числа строки задваиваются, потому что на первые числа так же есть движение
...
Рейтинг: 0 / 0
10.12.2019, 11:30
    #39900688
hotcolt
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
Вообщем не получается оконной функцией , из за пробелов в датах , а присоединить таблицу со всеми датами периода * магазины* продукты , не хватило памяти.
Подскажите , как реализовать вариант с циклом, плиз
...
Рейтинг: 0 / 0
10.12.2019, 13:23
    #39900776
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
hotcolt,

куда же память делась? Годовой календарь содержит всего 365 строк.
...
Рейтинг: 0 / 0
10.12.2019, 13:54
    #39900809
WarAnt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
hotcolt
Увы, нет, так считает только по датам когда было движение, и на первые числа строки задваиваются, потому что на первые числа так же есть движение


Вы убрали год из partition, может это причина того что у вам там задваивается?
Вторая причина почему задваивается в том что вы неправильно указали формат хранения данных в первом сообщении.
Насчет цикла,я думаю сами разберетесь, я курсоры не использую, оконная функция сдесь в любом случае решает задачу.
...
Рейтинг: 0 / 0
10.12.2019, 13:55
    #39900810
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Остатки по дням
Владислав Колосов
hotcolt,

куда же память делась? Годовой календарь содержит всего 365 строк.

Почти уверен, что ТС на полном серьезе попытался соорудить декартово произведение "со всеми датами периода * магазины* продукты"
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Остатки по дням / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]