|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
Здравствуйте. Подскажите пожалуйста, как правильно написать запрос. Допустим, есть таблица: ID, FIELD, POINT 1, 8, 23 1, 3, 17 1, 4, 12 2, 9, 10 2, 3, 26 2, 6, 7 Нужно для каждого ID вывести строку с максимальным значением POINT. Что-то типа: select ID, max(POINT) from TABLE group by 1 Но нужно вывести все поля таблицы. Результат запроса должен быть такой: 1, 8, 23 2, 3, 26 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2018, 10:35 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
vdpmr, Версия FB? Поле "Point" уникальное? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2018, 11:20 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
vdpmr, Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2018, 11:26 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
KreatorXXIvdpmr, Версия FB? Поле "Point" уникальное? KreatorXXI, кстати, я упустил этот момент... POINT не уникальное поле. Если несколько совпадающих максимальных значений, нужно их все вывести. Например, из таблицы: ID, FIELD, POINT 2, 5, 26 1, 8, 23 1, 3, 17 1, 4, 12 2, 9, 10 2, 3, 26 2, 6, 7 Должно получиться: 2, 5, 26 1, 8, 23 2, 3, 26 PS: Firebird 2.5 у меня ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2018, 11:48 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
vdpmr, Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Как-то так. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2018, 12:28 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
KreatorXXI, rstrelba, спасибо за ответы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2018, 12:33 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
vdpmr, Проверь оба. Подозреваю, запрос от коллеги выдаст только одну запись для каждого id. Что противоречит условиям задачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2018, 13:43 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
От Креатора красивее ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2018, 14:56 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
o_v_a, "from b, q" не может быть красиво по определению. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.11.2018, 16:08 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
WildSery, надо было джойнить? ИМХО, ещё хуже. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2018, 11:39 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
KreatorXXI, а чем явный JOIN хуже неявного? По моему от неявных джойнов одни беды, особенно если вдруг потом этот запрос надо будет модифицировать и добавить ещё один JOIN причём OUTER. Уж лучше сразу написать явный JOIN, чтобы потом переделывать не пришлось ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2018, 11:44 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
Симонов Денис, согласен. Джойн по двум полям. Мне, правда, непривычно. Где-то здесь проскакивало, что нехорошо конструкцию "join...on" нагружать дополнительными условиями. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2018, 12:01 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
KreatorXXI, ну я туда часто засовываю более одного условия, особенно для LEFT JOIN. Обычно в on пишут только условие связи, а where условие фильтрации, но для LEFT JOIN можно и дополнительные условия писать при понимании на что они влияют. Например Код: sql 1. 2. 3.
это бывает полезно если в t2 есть спец значение с кодом -1 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2018, 12:34 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
KreatorXXIГде-то здесь проскакивало, что нехорошо конструкцию "join...on" нагружать дополнительными условиями.Я не видел, и впервые слышу, что это влияет. Что-то пропустил? Наоборот, стараюсь все условия по конкретной таблице собрать в условие соединения, поскольку в сложном запросе читать многострочное WHERE глаза сломаешь, даже если по группам всё разделил. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.11.2018, 13:16 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
Здравствуйте! У меня похожая задача, но несколько отличающаяся Дана таблица Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Id - уникален, остальные столбцы могут повторяться. Нужно для каждой даты вывести строку с параметром Norma наиболее близким к 1.00. Если таких строк несколько, то выдавать любую (или с мин. Id). Например, для данной таблицы должно получиться: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2018, 14:34 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
_shrk_, оконные функции тебе в помощь ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2018, 14:49 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
_shrk_, версия FB? Оконные работают начиная только с третьей версии. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2018, 11:53 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
Версия 2.5 embedded ) В принципе переход на 3.0 возможен, если будет положительный результат ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2018, 20:27 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
_shrk_, А что считать положительным результатом? Твоя задача упомянутым институтом решается на-ура. Если сумеешь в нем разобраться.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.12.2018, 20:43 |
|
Выбор максимальных значений
|
|||
---|---|---|---|
#18+
В общем разобрался....)) Нарисовал я запрос: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
(a_id - внешний ключ) Делает то, что надо, на тестовом наборе из 200000 записей отбирает 10000 из них за 2 секунды, делая 200000 чтений из базы. Но запрос Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
выполняется на том-же наборе данных выполняется за 1 секунду, делая 400000 чтений из базы. Правда выдает он не одну строку, соответствующую критерию min(abs(Norma-1.000)), а несколько и в результате получаем 10008 записей)) Вот если бы губы Никанора Ивановича да приставить к носу убрать "лишние" данные из результатов второго запроса...))) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.12.2018, 01:10 |
|
|
start [/forum/topic.php?fid=40&msg=39748848&tid=1560863]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
90ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 301ms |
total: | 491ms |
0 / 0 |