2012-03-23 3 views
1

Я пытаюсь вернуть самое низкое значение для каждого набора данных, сгруппированных по столбцу.MySQL - группа По одному столбцу и получите самое низкое значение

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

Я нашел подобный пример (моя попытка с ней ниже) на MySQL Group By get title column with smallest date value


SELECT t1 . * FROM tbl_TravelFeed AS t1 
    INNER JOIN 
    (SELECT pk_id, MIN(perperson) AS perperson FROM tbl_TravelFeed 
     GROUP BY accommodation 
     ORDER BY perperson) AS t2  
    ON t1.pk_id = t2.pk_id AND t1.perperson = t2.perperson 

Это кажется почти работа, но она возвращает запись по наименьшим идентификатором вместо perperson. Я не могу понять, почему это можно исправить.

Я пытаюсь закончить университетское задание на вторник (27 марта '12) и хотел бы, чтобы это работало правильно, но оно не критично в большей картине.

Я пробовал много способов сделать это, включая использование Distinct. Вышеуказанный запрос, похоже, ближе всего к нему.

Будем очень благодарны за помощь.

Aaron

+2

@Cfreak Почему удалить домашнее задание тег? OP утверждает, что это университетское задание. – jzworkman

+0

@jzworkman, если бы я это сделал, это было случайно. Я пытался очистить запрос – Cfreak

ответ

0

Вы очень близки. Так как вы группирование по аккомодации, соответствующая ссылка из внутренней таблицы и внешней таблицы является accommodation поля, не pk_id:

(SELECT accommodation, MIN(perperson) AS perperson FROM tbl_TravelFeed 
    GROUP BY accommodation 
    ORDER BY perperson) AS t2 
ON t1.**accommodation** = t2.**accommodation** AND t1.perperson = t2.perperson 
+0

Это очень близкое вам спасибо. Просто нужно обрабатывать ситуации, когда есть несколько записей с одинаковым самым низким значением – asest

2

Это непроверенное, но это, как я хотел бы написать это в MySQL, вам причину Я помещаю свой подзапрос в инструкцию WHERE, чтобы я мог легко создать VIEW из этого запроса и всегда сохранять результаты в отдельном представлении, чтобы я мог делать запросы против этого.

SELECT * FROM tbl_Travelfeed AS t 
WHERE perperson = 
(
    SELECT MIN(perperson) 
    FROM tbl_Travelfeed 
    WHERE accommodation = t.accommodation 
) 
0
SELECT t.* 
FROM 
     tbl_TravelFeed AS t 
    INNER JOIN 
     (SELECT accommodation 
       , MIN(perperson) AS perperson 
      FROM tbl_TravelFeed 
      GROUP BY accommodation 
     ) AS g 
     ON g.accommodation = t.accommodation 
     AND g.perperson = t.perperson 
Смежные вопросы