Модераторы: skyboy

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> 2 запроса 
:(
    Опции темы
Zahard
Дата 20.5.2013, 03:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.4.2013

Репутация: нет
Всего: нет



Есть БД общежития с таким участком:
user posted image

Связь между pupil/payment, как и все остальные, 1:M, если кто не понял
Есть 2 запроса:
Вывести список месяцев с макс. задолженностью студентов по оплате. Здесь работа только с таблицей payment. Поле debt - задолженность. На текущим момент написал это:
SELECT student_id, MAX(Debt)
FROM payment
GROUP BY student_id;

Не понимаю как месяц и год сюда привязать.

Второй запрос - список студентов, проживающих в общежитии с указанием комнаты, в которой живет, и произведенной оплатой за последний месяц. На данный момент меня хватило на это:
SELECT DISTINCT pup.student_id,
hl.hostel_id,
hl.room_id,
pay.month_residence,
pay.contribution_paid
FROM payment pay JOIN pupil pup ON pay.student_id=pup.student_id
JOIN hostel_live hl ON pup.student_id=hl.student_id
JOIN edu_form ef ON pup.form_id=ef.form_id
WHERE ef.status='Студент'; 

Не понимаю как по последнему месяцу вывести и почему DISTINCT не работает. Нужна помощь  smile  СУБД - Oracle

PM MAIL   Вверх
Akina
Дата 20.5.2013, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Блин, ты даже разхдел по Ораклу http://forum.vingrad.ru/forum/oracle-database.html найти на форуме не можешь, куда тебе запросами заниматься...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 20.5.2013, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Zahard @  20.5.2013,  04:22 Найти цитируемый пост)
Не понимаю как месяц и год сюда привязать.

Вам сказано ранжировать месяца по задолженности а вы готовите аналитику в разрезе студентов smile
Цитата(Zahard @  20.5.2013,  04:22 Найти цитируемый пост)
произведенной оплатой за последний месяц

rtfm first/last

Цитата(Akina @  20.5.2013,  09:05 Найти цитируемый пост)
ты даже разхдел по Ораклу

так то а зачем тогда "Составление SQL-запросов"? smile
Это же не вопрос про ораклеспецифид плюхам. По мне так, вполне нормально выбран раздел. И указание платформы - не лишее.


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 20.5.2013, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Zloxa @  20.5.2013,  09:29 Найти цитируемый пост)
а зачем тогда "Составление SQL-запросов"?

ИМХО для вопросов, которые не связаны с конкретной СУБД и конкретным языком. Т.е. для случаев, когда гарантированно не могут использоваться особенности и фичи СУБД, и требуется полное соответствие минимальному стандарту и работоспособность на любой СУБД (с точностью до скобок и кавычек).


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 20.5.2013, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Akina,  если бы вопрос был как захерачить скрипт для sql*plus или как инициализировать PL/SQL колллекцию - тут ясно, что вопрос специфичен для платформы. Вопрос же заданный ТС вполне может быть решен ансишными средствами, здесь может оказаться полезным опыт и акцессса и маси, ровно как и ответ может быть полезным не только для завязавшихся на платформу оракакла


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 20.5.2013, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Zloxa, в первом запросе ему требуется вывод максимальной записи для группы, во-втором - последней. В каждой СУБД это будет делаться по-своему - ибо ансишный вариант страхолюден и тормозлив. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zloxa
Дата 20.5.2013, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 53
Всего: 161



Цитата(Akina @  20.5.2013,  11:20 Найти цитируемый пост)
 В каждой СУБД это будет делаться по-своему - ибо ансишный вариант страхолюден и тормозлив.  

Именно по этой причине я сказал, что упоминание платформы не лишнее.
Как по твоему, ТС, мог на этапе публикации поста определить - имеет ли решение его задачи платформозависимость?



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Akina
Дата 20.5.2013, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Zloxa @  20.5.2013,  12:04 Найти цитируемый пост)
Как по твоему, ТС, мог на этапе публикации поста определить - имеет ли решение его задачи платформозависимость?

По-моему, он обязан был не исключать такую возможность.




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zahard
Дата 20.5.2013, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.4.2013

Репутация: нет
Всего: нет



Если тематика разделов форума насктолько сильно пересекается, что решение написать пост по SQL-запросам в разделе SQL-запросов ошибочна, то это точно проблема организации этого форума, а не моя. Я же все сделал правильно.
PM MAIL   Вверх
Akina
Дата 20.5.2013, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Zahard @  20.5.2013,  04:22 Найти цитируемый пост)
Не понимаю как месяц и год сюда привязать.

Используй полученную выборку как условие отбора по другой копии исходной таблицы. Например. 
Кстати, а что тебе надо сделать, если у кого-то одинаковая, и в то же время максимальная, сумма задолженности встречается несколько раз в разных месяцах?

Цитата(Zahard @  20.5.2013,  04:22 Найти цитируемый пост)
произведенной оплатой за последний месяц.

Что такое "последний месяц"? Месяц последнего платежа? последний месяц, за который уплачено? что-то ещё?

Цитата(Zahard @  20.5.2013,  04:22 Найти цитируемый пост)
почему DISTINCT не работает

Он работает. Только ты, вероятно, не понимаешь, что он делает - а потому и не видишь, что он работает.


Цитата(Zahard @  20.5.2013,  17:05 Найти цитируемый пост)
Я же все сделал правильно. 

Оставайся при своём мнении. Впрочем, это ни на что не влияет - просто это ты потерял нескольких потенциальных отвечающих, а остальным с того ни холодно, ни жарко. 


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zahard
Дата 20.5.2013, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.4.2013

Репутация: нет
Всего: нет



Цитата

Кстати, а что тебе надо сделать, если у кого-то одинаковая, и в то же время максимальная, сумма задолженности встречается несколько раз в разных месяцах?

Этот момент не оговаривается. По хорошему надо чтобы оба таких месяца были выведены.
Цитата

Что такое "последний месяц"? Месяц последнего платежа? последний месяц, за который уплачено? что-то ещё?

Тут все просто, если для студента есть запись в hostel_live, то с наступлением нового месяца запись для него автоматически создается в payment. Т.е. это последний месяц проживания, за который надо внести оплату.
Цитата

Он работает. Только ты, вероятно, не понимаешь, что он делает - а потому и не видишь, что он работает

Отсеивает повторяющиеся записи? Мне нужно отсеить повторяющие по полю student_id если точнее.

Это сообщение отредактировал(а) Zahard - 20.5.2013, 17:06
PM MAIL   Вверх
Akina
Дата 20.5.2013, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



Цитата(Zahard @  20.5.2013,  18:04 Найти цитируемый пост)
По хорошему надо чтобы оба таких месяца были выведены.

В таком случае предложенный мной метод даст верные результаты.

Цитата(Zahard @  20.5.2013,  18:04 Найти цитируемый пост)
Тут все просто, если для студента есть запись в hostel_live, то с наступлением нового месяца запись для него автоматически создается в payment. Т.е. это последний месяц проживания, за который надо внести оплату.

Эээ... раньше было совсем другое, а именно "произведенной оплатой за последний месяц". Произведённая - это однозначно УЖЕ выполненная. Без вариантов. А теперь ты говоришь о планируемой сумме оплаты, с учётом накопленного долга/переплаты и безотносительно фактического платежа.
Кстати, а вендь за один календарный месяц может пройти и не один платёж - студенты, они такие... что в таком случае делать? причём и к первому вопросу это тоже относится...

Цитата(Zahard @  20.5.2013,  18:04 Найти цитируемый пост)
Отсеивает повторяющиеся записи? Мне нужно отсеить повторяющие по полю student_id если точнее.

DISTINCT отсеивает ПОЛНЫЕ дубликаты. По ВСЕМ полям записи. Если хоть в одном поле несовпадение - это несовпадающие записи, и DISTINCT-у там делать нечего.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zahard
Дата 20.5.2013, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.4.2013

Репутация: нет
Всего: нет



Цитата

Эээ... раньше было совсем другое, а именно "произведенной оплатой за последний месяц". Произведённая - это однозначно УЖЕ выполненная. Без вариантов. А теперь ты говоришь о планируемой сумме оплаты, с учётом накопленного долга/переплаты и безотносительно фактического платежа.

Формулировка может не совсем корректная. В payment указываются НЕОБХОДИМЫЕ платежи, те что были и те что еще должны произойти если debt>0.
Цитата

Кстати, а вендь за один календарный месяц может пройти и не один платёж - студенты, они такие... что в таком случае делать? причём и к первому вопросу это тоже относится...

Ответственность за подсчет числа платежей в месяц лежит на других таблицах, в payment заносится суммарная информация по платежам.
PM MAIL   Вверх
Akina
Дата 20.5.2013, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 45
Всего: 454



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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Zahard
Дата 27.5.2013, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 28.4.2013

Репутация: нет
Всего: нет



В общем, по прошествии времени, мой неокрепший в SQL запросах мозг выдал такие запросы:
1й запрос:
 SELECT month_residence, SUM(debt) "Задолженность"
FROM payment
GROUP BY month_residence
HAVING SUM(debt)=(SELECT MAX(X1)
FROM (SELECT SUM(debt) "X1"
FROM payment
GROUP BY month_residence));

2й запрос:
SELECT DISTINCT pup.student_id,
hl.hostel_id,
hl.room_id,
MAX(pay.month_residence) KEEP (DENSE_RANK LAST ORDER BY (pay.month_residence)) OVER (PARTITION BY pup.student_id) "Последний месяц",
MAX (pay.contribution_paid) KEEP (DENSE_RANK LAST ORDER BY (pay.month_residence)) OVER (PARTITION BY pup.student_id) "Оплата"
FROM payment pay JOIN pupil pup ON pay.student_id=pup.student_id
JOIN hostel_live hl ON pup.student_id=hl.student_id;

Правда во втором запросе у меня есть сомнения (нехеровые такие, сомнения) по поводу 5й строки "Оплата". Оцените плз, эксперты.

Это сообщение отредактировал(а) Zahard - 27.5.2013, 19:48
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.1026 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.