Mysql Query для получения лучших экземпляров класса - PullRequest
0 голосов
/ 29 марта 2012

У меня есть таблица, как показано ниже:

COL1  | COL2   | COL3
______________________
ITEM1 | CLASS1 | DATE1
ITEM2 | CLASS3 | DATE2
ITEM3 | CLASS1 | DATE3
ITEM4 | CLASS2 | DATE4
ITEM5 | CLASS1 | DATE2
ITEM6 | CLASS3 | DATE6
ITEM7 | CLASS2 | DATE3
.
.

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

Ответы [ 3 ]

4 голосов
/ 29 марта 2012

Попробуйте этот запрос, он ранжирует записи в группе, а затем использует ранг для фильтрации результатов -

SELECT col1, col2, col3 FROM (
  SELECT e1.*, COUNT(*) p FROM entries e1
    LEFT JOIN entries e2
      ON e1.col2 = e2.col2 AND e1.col3 <= e2.col3
    GROUP BY e1.col2, e1.col3
  ) t
WHERE p < 3

+-------+--------+-------+
| col1  | col2   | col3  |
+-------+--------+-------+
| ITEM5 | CLASS1 | DATE2 |
| ITEM3 | CLASS1 | DATE3 |
| ITEM7 | CLASS2 | DATE3 |
| ITEM4 | CLASS2 | DATE4 |
| ITEM2 | CLASS3 | DATE2 |
| ITEM6 | CLASS3 | DATE6 |
+-------+--------+-------+
1 голос
/ 29 марта 2012

Не пробовал, пожалуйста, попробуйте:

SELECT t.*, max(col3) as `date`  /* Most recent date */
  FROM table t
  GROUP BY col2 

UNION 

SELECT t2.*, max(col3) as `date` /* second recent date */
  FROM table t2
  WHERE col3 NOT IN 
     (SELECT max(col3) WHERE col2 = t2.col2 GROUP BY col2) 
  GROUP BY col2 
0 голосов
/ 29 марта 2012

Попробуйте это ...

(
SELECT t1.* FROM the_table t1
   LEFT JOIN the_table t2 ON t2.col2=t1.col2 AND t2.col3<t1.col3
   LEFT JOIN the_Table t3 ON t3.col2=t2.col2 AND t3.col3<t2.col3
WHERE t3.col2 IS NULL AND t2.col2 IS NOT NULL
ORDER BY t1.col2,t1.col3 DESC
)
UNION
(
SELECT t4.* FROM the_table t4
   LEFT JOIN the_table t5 ON t4.col2=t5.col2 AND t4.col1!=t5.col1
   LEFT JOIN the_Table t6 ON t5.col2=t6.col2 AND t5.col1!=t6.col1
WHERE t6.col1 IS NULL
ORDER BY t4.col3 DESC
)

Примечание: вторая часть в объединении предназначена для выборки строк, которые имеют менее 3 записей на класс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...