powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Запросик 2....
21 сообщений из 21, страница 1 из 1
Запросик 2....
    #33071616
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мыслители! Есть большая необходимость написать следующее.
1. Есть таблица с товарами product(product_id).
2. Есть таблица со сводным движением товаров, предположим
move (product_id, date, product_move).
3. Есть таблица с текущими остатками товаров stock(product_id, stock_count).
Задача: нужно посчитать количество дней с положительным остатком, например, за последний месяц... Как это лучше реализовать, или может кто-нибудь с подобным сталкивался?... Нужен один select.
...
Рейтинг: 0 / 0
Запросик 2....
    #33071646
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
я бы предпочёл (в добавок к написаному) увидеть и SQL statements создания табличек с primary/foreign keys definition - как-то привычнее, что ли....
...
Рейтинг: 0 / 0
Запросик 2....
    #33071667
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
create table product
(product_id bigint not null generated always ......,
.......
PRIMARY KEY (product_id)
) ................

create table move
(product_id bigint not null,
date date not null,
move double not null
PRIMARY KEY (product_id, date),
FOREIGN KEY (product_id) REFERENCES PRODUCT (PRODUCT_ID)
) ................

create table stock
(product_id bigint not null,
stock_count double not null
PRIMARY KEY (product_id),
FOREIGN KEY (product_id) REFERENCES PRODUCT (PRODUCT_ID)
) ................

что-то вроде этого....
...
Рейтинг: 0 / 0
Запросик 2....
    #33071775
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
а теперь, если можно, логику. Бизнесс логику. Ну то есть как товары двигаються.
Ну то есть, как связаны между собой такие действия, как внесение записи в table move and table stok.
Я так понимаю, что при внесении записи в move, надо делать изменение записи в stok.

sorry for disturbing
...
Рейтинг: 0 / 0
Запросик 2....
    #33071815
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблица move показывает общее операционное движение товара за день, ее на самом деле нет. Есть несколько таблиц, в которых хранятся все приходы и расходы товаров. При изменении этих таблиц изменяется таблица с остатками.
То есть физически есть таблица, которая содержит текущие(последние) значения остатков товаров и есть таблицы, в которых содержится все движение товаров. Идеи, которые приходят в голову... Остатки на даты насчитывать либо с первоначальной даты (остаток = все приходы - все расходы по товару до определенной даты), либо идти от текущей даты (остаток = все расходы - все приходы).
...
Рейтинг: 0 / 0
Запросик 2....
    #33071972
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
-- получаем остатки на каждый день
-- только из оборотов
select
	product_id,
	date,
	cast(move as decimal( 17 , 2 )) move,
	cast(sum(move) over(partition by product_id order by product_id,date) as decimal( 17 , 2 )) saldo
from 
	move
order by
	product_id,
	date
@

-- там где остаток < 0 там ставим 1
with  tmp(product_id,date,move,saldo) as (
	select
		product_id,
		date,
		cast(move as decimal( 17 , 2 )) move,
		case 
			when cast(sum(move) over(partition by product_id order by product_id,date) as decimal( 17 , 2 ))< 0  then  1 
			else  0 
		end
	from 
		move	
) select 
		product_id,count(*) from tmp 
	where date between ... and ...
	group by product_id
@

типа того...
...
Рейтинг: 0 / 0
Запросик 2....
    #33071996
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего такое:
sum(move) over(partition by product_id order by product_id,date) as decimal(17,2))
????
...
Рейтинг: 0 / 0
Запросик 2....
    #33072066
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще одно маленькое уточнение, которое возможно все и портит. В таблице move если движения по товару не было - нет записи....
...
Рейтинг: 0 / 0
Запросик 2....
    #33072127
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
это OLAP functions
...
Рейтинг: 0 / 0
Запросик 2....
    #33072196
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TORTИ еще одно маленькое уточнение, которое возможно все и портит. В таблице move если движения по товару не было - нет записи....
ну и что? ... можешь разницу в днях между записями посчитать - типа сколько дней продержался остаток без движения... Захочешь - выкрутишься
...
Рейтинг: 0 / 0
Запросик 2....
    #33072223
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
млин... Я уже написал запрос... Без OLAP-функций....Он даже правильно считает.:).. Только не устраивает скорость запроса и стоимость (~2.5 млн. в моем варианте). Нужно ускорить...Поэтому ищу технологии, может кто сталкивался с подобным.....
...
Рейтинг: 0 / 0
Запросик 2....
    #33072247
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
обычно остатки для этого уже хранят в посчитанном виде, а не считают... или по крайней мере обороты.
...
Рейтинг: 0 / 0
Запросик 2....
    #33072268
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если держать таблицу с остатками/оборотами, то накладно получается.....
Количество товаров * количество дат * количество предприятий = Слишком много, и причем растет быстро... Разве это выход?
...
Рейтинг: 0 / 0
Запросик 2....
    #33072276
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подсчет оборотов дает стоимость (~8,5 тыс).... Ну можно посторить MQT для них, наверняка это увеличит скорость...
У меня основной затуп идет, когда пытаюсь собрать в подзапросе таблицу (product_id, date) для всех дат и товаров....
...
Рейтинг: 0 / 0
Запросик 2....
    #33072324
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
у Николая есть бесподобная презентация Unleashed SQL. Это второй must read после CookBook для каждого, кто должен писать что-нибудь сложнее select * from table
в DB2

Ну а по поводу "накладно получается" - кто строит дизайн, тому и решать. Сравнивай. Скорость выполнения запроса, стоимость дискового пространства.
...
Рейтинг: 0 / 0
Запросик 2....
    #33072334
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НИКОЛАЙ!!!!!
...
Рейтинг: 0 / 0
Запросик 2....
    #33072638
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, сейчас посмотрел-подумал... да... ОЛАП функции не катят для того, что тебе нужно. Но на С/С++ такую фишку действительно можно написать. Конечно - интересная, нетривиальная задача.

Пусть у нас есть упорядоченные записи:

1 01.01.2005 0
2 05.01.2005 4
3 15.01.2005 10
4 17.01.2005 2
5 28.01.2005 11

Вот это 3-е дурацкое поле является разницей между днями в предыдущей и текущей строками.
А отсортировав эту выборку в обратном направлении, и применив ту же функцию, мы действительно получим - типа сколько дней действовал каждый остаток.

5 28.01.2005 0
4 17.01.2005 11
3 15.01.2005 2
2 05.01.2005 10
1 01.01.2005 4

Офигительно!... по-моему ОЛАП ф-ции этого не умеют.... но на С++ такое поведение реализовать (такую ф-цию) - как два пальца! ...
...
Рейтинг: 0 / 0
Запросик 2....
    #33072666
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идея хорошая...... А дальше можно получить 1 или 0 в смысле был остаток на эту дату или нет, а потом перемножить 1 или 0 на 3 параметр.... Просуммировав получим число дней с остатком???? Правильно мыслю?
...
Рейтинг: 0 / 0
Запросик 2....
    #33072677
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А самое главное не надо для всех товаров держать все даты, а это уже сокращает стоимость на несколько порядков......
...
Рейтинг: 0 / 0
Запросик 2....
    #33072794
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну дык, действуй!)
...
Рейтинг: 0 / 0
Запросик 2....
    #33073052
TORT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выводы:
1. Стоимость запроса снизилась в 2500000/8600 ~300 раз.....
2. SCRATCHPAD forever!!!
Всем спасибо.....Громадное gardenman'у!
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Запросик 2....
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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