powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите пожалуйста с запросом.
6 сообщений из 6, страница 1 из 1
Помогите пожалуйста с запросом.
    #38603377
andrej11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Помогите пожалуйста с запросом. Есть таблица материалов состоящих из разных компонентов. Компоненты внутри материала могут быть заменены на другие компоненты, вследствие чего, версия материала увеличиваеться на +1.

IDMatCompVer1Mat_1Comp_102Mat_1Comp_X03Mat_1Comp_214Mat_1Comp_X15Mat_1Comp_326Mat_1Comp_X27Mat_2Comp_Y08Mat_2Comp_W0

Нужно выдать актуальный список всех материалов.

MatCompMat_1Comp_3Mat_1Comp_XMat_2Comp_YMat_2Comp_W

Заранее спасибо за любую помощь.
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом.
    #38603380
Hawkmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Находим максимальную версию для данного материала.
2. находим материал и компонент с версией из п.1

1.
select max(ver) as maxver, mat from table group by mat

2. select mat, comp from table a, п.1 as b where a.ver=b.maxver and a.mat=b.mat
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом.
    #38603406
Dim666
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrej11,

Код: plsql
1.
2.
3.
4.
SELECT a.mat,a.comp
FROM table a, (select mat,max(ver) as max_version from table group by mat) b
WHERE a.mat=b.mat and a.ver=b.max_version
ORDER BY 1,2
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом.
    #38603437
andrej11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hawkmoon, Dim666

Огромное спасибо за быстры ответ! Все отлично работает.
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом.
    #38603690
biwed.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrej11,
Добрый день.
Есть просто другой способ решения, через "оконные функции".
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
/*Создане таблицы для примера*/
CREATE TABLE test.test_material
(  id integer,
    mat text,
    comp text,
  ver integer);
INSERT INTO test.test_material(id, mat, comp, ver) VALUES ( 1,'Mat_1','Comp_1', 0);
INSERT INTO test.test_material(id, mat, comp, ver) VALUES ( 2,'Mat_1','Comp_X', 0);
INSERT INTO test.test_material(id, mat, comp, ver) VALUES ( 3,'Mat_1','Comp_2', 1);
INSERT INTO test.test_material(id, mat, comp, ver) VALUES ( 4,'Mat_1','Comp_X', 1);
INSERT INTO test.test_material(id, mat, comp, ver) VALUES ( 5,'Mat_1','Comp_3', 2);
INSERT INTO test.test_material(id, mat, comp, ver) VALUES ( 6,'Mat_1','Comp_X', 2);
INSERT INTO test.test_material(id, mat, comp, ver) VALUES ( 7,'Mat_2','Comp_Y', 0);
INSERT INTO test.test_material(id, mat, comp, ver) VALUES ( 8,'Mat_2','Comp_W', 0);

/*Сам скрипт*/
select mat, 
       comp
from (SELECT id,  mat,  comp, ver,  max(ver) over(partition by mat) as max_ver
         FROM test.test_material
       ) as t
where t.ver = t.max_ver;


Думаю, кому будет интересно могут почитать сами.

С уважением,
biwed.ru
...
Рейтинг: 0 / 0
Помогите пожалуйста с запросом.
    #38603803
Hawkmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
biwed.ru,

max(ver) over(partition by mat) - тоже неплохо )
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите пожалуйста с запросом.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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