Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
в общем допустим у меня есть такая таблица 1 (представлена на рисунке - на самом деле это сводная таблица, но суть не в этом) мне из неё нужно выбрать по одной записи для student_id но с таким условием что бы payment_id был максимальным для этого student_id то есть из таблицы 1 мне нужно получить таблицу 2 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2005, 18:16 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
таки что без процедуры с циклом или обработки в скрипте ни кто не подскажет как такое сделать ? :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2005, 19:02 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
Попробуй что-то в этом роде Код: plaintext 1. 2. 3. 4. 5. -- С наилучшими пожеланиями, Иван Евтухович ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2005, 19:20 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
JackSтаки что без процедуры с циклом или обработки в скрипте ни кто не подскажет как такое сделать ? :( Может все таки посмотреть в сторону GROUP BY ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2005, 19:20 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
а что надо сделать с остальными полями? вообще то что вы просите (если брать только те поля которые вы указали в вопросе) то нужно group by по выбранным полям, а на payment_id наложить агрегат MAX ну примерно так Код: plaintext но это только 2 поля остальным либо группировать либо свои агрегаты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2005, 19:29 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. но это будет существенно при соотношении > 1:20 (я так думаю). Зато один проход по таблице. И это работает только в Postgres (насколько я знаю). Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2005, 19:29 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
я уже пробовал и с GROUP BY и с JOIN самой на себя и с вложенными запросами и с HAVING но так и не придумал запроса который бы работал как нужно :\ сейчас посмотрю и попробую ваши предложения. с GROUP BY получалось на несколько полей помоему штуки на 3 базовых, но кроме них нужно ещё с десяток в селект (запрос то сводный как бы) и вот как раз то после добавления этого "с десяток" он требует их в GROUP BY но как только туда добавляю всё летит на ... ну, в общем летит ... :) и выводится опять полный список вместо сокращённого как надо ... что касается "а что с стальными?" а с остальными просто нужено показать что в них, то есть просто селект ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 10:27 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
вот что бы не блуждать в потёмках дам конкретные запросы что используются: и так ... Таблица 1 - это то что сейчас естьи выдаётся функцией приведённой ниже, Таблица 2 - это то, что бы мне хотелось получить (это я так, уточнил снова) вот функция которая выдаёт таблицу 1 Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 10:45 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
вы похоже не понимаете как работает group by правильно он хочет чтобы вы указали все поля без агрегатов в поле group потому что он не знает что с ними делать например столбец group_code там есть парень Кузнецов так вот он находится почему-то в 2х группах FDIA и TEST естественно если вы запихнете эту колонку в group то и получите 2 строки, а вот чтобы была одна строка вам нужно наложить в селекте на нее АГРЕГАТ который укажет какое именно значение вы хотите получить из выборки (например мах или min без разницы если вам без разницы что получать) ИМХО group by вам должен однозначно помочь. иначе вы имеете неверные данные (выборка из которых не подчиняется никакой логике) либо не понимаете что вам нужно получить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 11:03 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
Funny_Falcon спасибо, всё получилось :) Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 11:07 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
vfabrвы похоже не понимаете как работает group by правильно он хочет чтобы вы указали все поля без агрегатов в поле group потому что он не знает что с ними делать например столбец group_code там есть парень Кузнецов так вот он находится почему-то в 2х группах FDIA и TEST естественно если вы запихнете эту колонку в group то и получите 2 строки, а вот чтобы была одна строка вам нужно наложить в селекте на нее АГРЕГАТ который укажет какое именно значение вы хотите получить из выборки (например мах или min без разницы если вам без разницы что получать) ИМХО group by вам должен однозначно помочь. иначе вы имеете неверные данные (выборка из которых не подчиняется никакой логике) либо не понимаете что вам нужно получить. в двух группах это потому что список транзакций ... он был в одной потом перевёлся или решил бросить и прочее ... мне как раз то без разницы до того в какой он группе и в группе ли он вообще, просто мне нужно было МАХ(payment_id) что бы вывести список с текущим статусом по всем студентам сессии а потом уже нажму на студента и выведу список всех его транзакций со всеми деталями ... в общем всем спасибо, особенно Funny_Falcon который дал мне то что нужно за исключением того что должно быть в поле МАХ :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 11:13 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
джоинить выборку саму к себе всесто того чтобы использовать группировку (которая вам 100% подойдет), да и еще запихивать селект в plpgsql ую процедуру это пижонство :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 11:19 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
vfabrджоинить выборку саму к себе всесто того чтобы использовать группировку (которая вам 100% подойдет), да и еще запихивать селект в plpgsql ую процедуру это пижонство :-) предложите другой вариант без использования джоина самой к себе, с удовольствием рассмотрю и буду использовать более рациональное предложение - критиковать все умеют :) селект в процедуре не зря ... в принципе вся система на процедурах построена это и удобно, и избавляет сурс модулей от здоровых запросов и беготни от модуля к модулю, от контроллера к контроллеру что бы проследить все наследования, объявления и прочее + нет повторяющихся по 10 раз похожих запросов + определённая гибкость при выборе процедуры из модуля ... на пример в нашем случае могу обратиться просто к get_all_payments() в которой выборка по текущей ревизии Код: plaintext или же "ручками" задам ннужный номер get_all_payments(int4) система просто довольно не маленькая с сессиями, ревизиями (различные варианты расписаний для групп различные составы групп их уровни и прочее) так что если без процедур то можно вешаться :) а так всё быстро изменяется, масштабируется и прочее ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 11:33 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
я предложил вы сказали что это не то ну что ж хозяин барин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 12:46 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
JackS селект в процедуре не зря ... в принципе вся система на процедурах построена это и удобно, и избавляет сурс модулей от здоровых запросов и беготни от модуля к модулю Ну допустим. Но зачем plpgsql, где достаточно простого sql ? Это же удар по производительности. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2005, 13:42 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
пример: create table my_table( id int, date timestamp,price int); select * from my_table as m1 where (select count(*) from my_tabele where price>m1.price and id=m1.id)=0; получаем то что хотелось бы видеть,если был бы реален запрос : select id,date,max(price) from my_table group by id; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.09.2005, 10:47 |
|
||
|
SELECT c MAX
|
|||
|---|---|---|---|
|
#18+
2 Funny_Falcon таково требование заказчика откровенно говоря не вкурсе на сколько будет проигрыш в производительности и из за чего (не против бы узнать ;) я с постгресом 2 месяца как знаком и это первый проэкт на нём :) по этому глубоко не копался в деталях) в данном случае производительность не существенна ибо пользоваться системой будут человек 5 от силы - она для внутреннего использования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.09.2005, 17:44 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33290243&tid=2006974]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
1ms |
| others: | 260ms |
| total: | 412ms |

| 0 / 0 |
