2014-01-14 5 views
1

Допустит, у нас есть такая таблица:SQL выбрать отчетливые только самые высокие значения

table

я только то, что выбрать уникальные планы с самым высоким временем, а также возможность выбора других столбцов. Чтобы ilustrate вот запрос (ведьма, очевидно, не будет работать):

SELECT DISTINCT(plan), time, id 
FROM table 
ORDER BY time desc 

, как я могу получить такую ​​таблицу:

plan|time|id 
----+----+-------- 
1 |0 |9 
2 |90 |10 
3 |180 |11 
4 |360 |12 
5 |720 |13 
6 |1080|15 
7 |0 |16 
8 |720 |23 
+0

является самым высокое временем уникальным для каждого плана? Какую из строк следует выбирать, когда найдено два самых высоких раза? Это важно, если вы хотите выбрать больше данных в строке. –

+0

@KubaWyrostek, как вы можете видеть в таблице времени, не является уникальным для каждого плана, см. Идентификатор плана. 7 – Benedictus

+1

. Тогда вам нужно другое условие, чтобы отличать такие строки (например, 'min (id)'). –

ответ

-4

ВЫБЕРИТЕ план, не более (время), идентификатор С демо группы по плану

check fiddle

+2

Удалены лишние круглые скобки. 'DISTINCT' ** не ** функция. –

+0

Кроме этого, этот запрос является неправильным - даже незаконным, если включен параметр ONLY_FULL_GROUP_BY. –

+0

что случилось? Я думаю, что это работает без DISTINCT, это требуется здесь? – Benedictus

4

Это звучит как простой совокупности запросов:

SELECT plan, MAX(time) 
FROM  mytable 
GROUP BY plan 
+0

это нормально, но что мне делать, если я хочу выбрать больше столбцов? – Benedictus

+0

Это зависит, например, предложение GROUP BY удаляет дублированные результаты на основе условия ... вы попросили уникальности – linuxatico

2

Если высокое время является уникальным в план, и вам необходимо выбрать несколько столбцов, то автообъединение должна сделать

select mytable.* from 
mytable 
inner join 
    (
    select plan, max(time) as maxtime 
    from mytable 
    group by plan 
) as maxtimes 
    on mytable.plan = maxtimes.plan and mytable.time = maxtimes.maxtime 
+0

не работает. Некоторые строки имеют одинаковый идентификатор плана и одно и то же время, поэтому их дублируют – Benedictus

+0

ow, да, вы написали это, извините – Benedictus

Смежные вопросы