powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка из таблицы с первичным ключем из двух полей
25 сообщений из 26, страница 1 из 2
Выборка из таблицы с первичным ключем из двух полей
    #38642361
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача в следующая, есть таблица:

Id1 Id2 Qty
1 1 10
1 2 10
1 3 20
2 1 20
2 2 20
2 3 30
3 1 40
3 2 50

Поля id1, id2 составляют первичный ключ.

Следует написать один запрос (т.е. без предварительных запросов, сохраняющих данные где-нибудь в переменных или временных таблицах, без циклов и проч.) , возвращающий по одной записи для каждого значения id1, встречающегося в исходной таблице, при этом, если в исходной таблице есть несколько строк с таким значением id1, то возвращается строка с минимальным для этого значения id1 значением поля Qty. Если таких строк для данного id1 будет несколько, годится любая из них.

Мне на ум пришло только такое решение:

select t.id1, max (t_.id2) , t.qty from
(select id1, min(qty) qty
from test_table
group by id1) t inner join test_table t_ on (t.id1 = t_.id1 and t.qty = t_.qty)
group by t.id1, t.qty

Является ли данное решение верным? Ну тоесть результат верный, но можно ли сказать, что я не использую предварительных запросов?

Верные результаты для приведенной таблицы?

Id1 Id2 Qty
1 1 10
2 1 20
3 1 40

Id1 Id2 Qty
1 2 10
2 1 20
3 1 40

Id1 Id2 Qty
1 1 10
2 2 20
3 1 40

Id1 Id2 Qty
1 2 10
2 2 20
3 1 40
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642391
Граур Станислав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чем не устраивает

Код: sql
1.
2.
3.
select t.id1, max(t_.id2) as any_id2, min(t.qty) as qty from
from test_table
group by t.id1



?
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642403
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лабораторные работы нужно делать самостоятельно
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642413
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тупанул, такой запрос будет ту же выборку делать.

Но меня смущает следующее, пусть id1 – это код товара, id2 – код партии товара, Qty – остаток на складе. Запрос должен выбрать по одной партии каждого товара с наименьшим остатком, тогда я, практически явно задаю, что код партии будет максимальным при минимальном остатке, а этого делать не нужно.

Тоесть нужно задать в условии, что остаток должен быть минимальным и все, потом для каждого товара выбрать партию с минимальным остатком
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642417
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящийлабораторные работы нужно делать самостоятельно


Дяденька, мне 25 лет, я Вам паспорт могу показать.
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642434
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aftor_MagisterТоесть нужно задать в условии, что остаток должен быть минимальным и
все, потом для каждого товара выбрать партию с минимальным остатком
Код: sql
1.
select first_value(id1, id2) over (partition by id1 order by Qty) from t


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642443
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovAftor_MagisterТоесть нужно задать в условии, что остаток должен быть минимальным и
все, потом для каждого товара выбрать партию с минимальным остатком
Код: sql
1.
select first_value(id1, id2) over (partition by id1 order by Qty) from t




Это вообще не работает, видимо нужно подключать библиотеку для first_value ... over.

Задача должна решаться стандартными средствами T-SQL
Но кроме как так:

select id1, max(id2), min(qty) qty
from test_table
group by id1

не выходит
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642448
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aftor_MagisterЗадача должна решаться стандартными средствами T-SQL
ты форумом ошибся, тебе в mssql
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642454
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aftor_Magister,

в firebird'е ты не сможешь решить задачу "стандартными средствами T-SQL", т.к. T-SQL в нём нету

для first_value ... over не нужно подключать никакую библиотеку, да и не получится это, DS как обычно пошутил применив конструкцию из FB 3
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642455
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисAftor_Magister,

в firebird'е ты не сможешь решить задачу "стандартными средствами T-SQL", т.к. T-SQL в нём нету

для first_value ... over не нужно подключать никакую библиотеку, да и не получится это, DS как обычно пошутил применив конструкцию из FB 3

А если средствами SQL? Можно ее решить?
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642459
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну не выходя за рамки join`ов, where`ов и having`ов
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642465
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще в условии задачи написано, что возможны разные варианты решения
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642483
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aftor_Magisterв условии задачи написано
И ты всё ещё утверждаешь, что это не лабораторная?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642488
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovAftor_Magisterв условии задачи написано
И ты всё ещё утверждаешь, что это не лабораторная?..


именно, разве задача может быть только лабораторной?
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642492
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aftor_MagisterИ еще в условии задачи написано, что возможны разные варианты решения

Если я нигде не ошибся то вот еще один вариант

читая вот это
Aftor_MagisterТоесть нужно задать в условии, что остаток должен быть минимальным и все, потом для каждого товара выбрать партию с минимальным остатком

приходим к выводу что есть справочник товаров и следовательно можно использовать его

ну и получим что-то вроде вот этого

Код: sql
1.
2.
3.
select s.Id,r.id2,r.qty
from spr_id s
join (select first 1 t.id1, t.id2,t.qty from test_table t order by t.qty ....) r on ....
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642495
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Граур СтаниславЧем не устраивает

Код: sql
1.
2.
3.
select t.id1, max(t_.id2) as any_id2, min(t.qty) as qty from
from test_table
group by t.id1



?

Такой вариант не верный, ибо в таком случае выборки из таблицы

Id1 Id2 Qty
3 1 40
3 2 50

Результат будет

Id1 Id2 Qty
3 2 40

Вариант, который был в первом посте:

select t.id1, max (t_.id2) , t.qty from
(select id1, min(qty) qty
from test_table
group by id1) t inner join test_table t_ on (t.id1 = t_.id1 and t.qty = t_.qty)
group by t.id1, t.qty

работает верно, но не противоречит ли он вот этому: " Следует написать один запрос (т.е. без предварительных запросов, сохраняющих данные где-нибудь в переменных или временных таблицах, без циклов и проч.) "? И можно ли избавиться от max (t_.id2) ?
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642497
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aftor_Magisterразве задача может быть только лабораторной?
Такая задача с такой формулировкой - да. В реальных задачах применяют PSQL и не парятся с
чистотой.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642504
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovAftor_Magisterразве задача может быть только лабораторной?
Такая задача с такой формулировкой - да. В реальных задачах применяют PSQL и не парятся с
чистотой.


Оу, ну да, я же забыл, что Вам виднее где я взял задачу, тогда конечно да, сто пудей лабораторная.

Лучше бы предложили свои варианты решения (я ведь привел решение в первом посте и спросил, насколько оно соответствует поставленному условию выполнения).

Так что нечего разводить срач и писать не по делу, засоряя топик
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642507
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 года прошло.
а мальчику всё неймётся.

Помогите
составить выборку

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642512
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aftor_Magisterможно ли избавиться от max (t.id2)?
Можно заменить его на min(t.id2).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642514
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aftor_Magister,

этому условию "Следует написать один запрос (т.е. без предварительных запросов, сохраняющих данные где-нибудь в переменных или временных таблицах, без циклов и проч.)" твой запрос удовлетворяет. Правильно ли он работает и решает ли поставленную задачу не знаю. Думать лень
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642525
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов ДенисAftor_Magister,

этому условию "Следует написать один запрос (т.е. без предварительных запросов, сохраняющих данные где-нибудь в переменных или временных таблицах, без циклов и проч.)" твой запрос удовлетворяет. Правильно ли он работает и решает ли поставленную задачу не знаю. Думать лень

Вот этот?

select t.id1, max (t_.id2) , t.qty from
(select id1, min(qty) qty
from test_table
group by id1) t inner join test_table t_ on (t.id1 = t_.id1 and t.qty = t_.qty)
group by t.id1, t.qty

спасибо за дельный ответ, этот запрос делает правильную выборку
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642529
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovAftor_Magisterможно ли избавиться от max (t.id2)?
Можно заменить его на min(t.id2).


Это просто гениальный ответ, высший пилотаж.
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642536
Aftor_Magister
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мимопроходящий2 года прошло.
а мальчику всё неймётся.

Помогите
составить выборку



Ну да. При этом ни там, ни здесь полезным ты не отказался.
...
Рейтинг: 0 / 0
Выборка из таблицы с первичным ключем из двух полей
    #38642543
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Aftor_magister!
You wrote on 15 мая 2014 г. 16:51:01:

Aftor_magister> Ну да. При этом ни там, ни здесь полезным ты не отказался.
артёмка, шел бы ты аццедова.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выборка из таблицы с первичным ключем из двух полей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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