Как заказать, сгруппируйтесь, порядок с MySQL

Вот упрощенная версия моей таблицы

tbl_records
-title
-created
-views

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

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

Спасибо

Править:

ДЕМОНСТРАЦИОННЫЕ ДАННЫЕ:

-title: Gnu Design
-created: 2009-11-11 14:47:18
-views: 104

-title: Gnu Design
-created:2010-01-01 21:37:09
-views:9

-title: French Connection
-created:2010-05-01 09:27:19
-views:20

Я хотел бы, чтобы результаты были:

-title: French Connection
-created:2010-05-01 09:27:19
-views:20

-title: Gnu Design
-created:2010-01-01 21:37:09
-views:9

Только новый Дизайн Гну показывают, и затем результаты заказаны представлениями.

6
задан Bill Karwin 23 January 2010 в 00:15
поделиться

3 ответа

Какова разница между = = и = = = и почему вы вообще хотите использовать = = =?

-121--847615-

Проблема заключается в визуализации под-пикселов, которая возникает, когда исходное значение (которое является плавающим значением) имеет ненулевую дробную составляющую. Округлите до ближайшего целого числа и вы должны быть в порядке.

-121--2122929-

Это пример проблемы greatest-n-per-group , которая часто возникает в StackOverflow.

Вот мое обычное решение:

SELECT t1.*
FROM tbl_records t1
LEFT OUTER JOIN tbl_records t2 ON (t1.title = t2.title AND 
  (t1.created < t2.created OR t1.created = t2.created AND t1.primarykey < t2.primarykey))
WHERE t2.title IS NULL;

Объяснение: найдите строку t1 , для которой не существует другой строки t2 с тем же заголовком и большей датой создания . В случае связей используйте уникальный ключ для разрешения связи, если не удается получить несколько строк на заголовок .

3
ответ дан 17 December 2019 в 07:04
поделиться
 select i.*, o.views from
   (
       select
       title
       , max(created) as last_created
       from tbl_records
       group by title
   ) i inner join tbl_records o
   on i.title = o.title and i.last_created = o.created
   order by o.views desc

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

Редактировать : видел ваши данные образца и редактировал соответственно.

1
ответ дан 17 December 2019 в 07:04
поделиться
SELECT title, 
       MAX(created), 
       views 
FROM table 
GROUP BY title 
ORDER BY views DESC
0
ответ дан 17 December 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: