Вот упрощенная версия моей таблицы
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
Только новый Дизайн Гну показывают, и затем результаты заказаны представлениями.
Какова разница между = = и = = = и почему вы вообще хотите использовать = = =?
-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
с тем же заголовком
и большей датой создания
. В случае связей используйте уникальный ключ для разрешения связи, если не удается получить несколько строк на заголовок
.
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
Я предполагаю, что агрегация будет применяться к мнениям
, составляет счетчика ()
, но вполне может быть неправильно (вам нужно иметь какой-то способ определить, какую меру представлений вы хотите иметь за последний созданный заголовок). Надеюсь, это поможет.
Редактировать : видел ваши данные образца и редактировал соответственно.
SELECT title,
MAX(created),
views
FROM table
GROUP BY title
ORDER BY views DESC