MySQL выбрать самый последний, ограничение по источнику - PullRequest
1 голос
/ 27 февраля 2012

У меня есть таблица со следующими полями:

  • id
  • source_id
  • title
  • date

Я хочу выбрать 25 самых последних элементов, поэтому SELECT * FROM table ORDER BY date DESC LIMIT 50

Дополнительным требованием является выбор только 3 самых последних из каждого source_id.

Так что, если записи выглядят примерно такчто,

 id | source_id | title |    date
----+-----------+-------+---------
  1       2         aaa   2012-1-1
  2       2         aaa   2012-1-2
  3       2         aaa   2012-1-3
  4       2         aaa   2012-1-4
  5       3         aaa   2012-1-5
  6       4         aaa   2012-1-6

Я хочу, чтобы мой запрос возвращал элементы 4,3,2,5,6

Так что всего 3 самых последних из каждого источника с общим пределом 25.

Я не уверен, что это достаточно ясно, поэтому, пожалуйста, спросите, если вам нужно больше деталей.

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

А вот и вы:

SELECT *
FROM your_table t1
WHERE
    (
        SELECT COUNT(*)
        FROM your_table t2
        WHERE
            t1.source_id = t2.source_id
            AND t1.date < t2.date
    ) < 3
ORDER BY source_id, date DESC

Результат:

4   2   aaa 2012-01-04
3   2   aaa 2012-01-03
2   2   aaa 2012-01-02
5   3   aaa 2012-01-05
6   4   aaa 2012-01-06

Простым английским: берите только строки, у которых меньше 3 новее строк с то же source_id.

ПРИМЕЧАНИЕ. Можно выбрать более 3 строк на source_id, если третий новейший date (для того же source_id) окажетсяразделен более чем на один ряд.Дайте мне знать, что означает «3 новейших» в этом контексте, если это проблема ...

0 голосов
/ 27 февраля 2012
    select * from table where source_id in 
    (select distinct source_id from table order by date limit 3)
LIMIT 25
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...