MySQL запрос: удалить дубликаты из упорядоченного списка - PullRequest
1 голос
/ 12 марта 2012

Мой стол называется items.В нем есть столбцы item_id и source, а также некоторые другие столбцы.

Я хочу сделать выборку, упорядоченную по item_id, но я также хочу, чтобы в столбце source не было дубликатов.результата.

Что не так с этим запросом?

SELECT *
FROM items
WHERE item_section='sp_500'
ORDER BY item_id DESC
GROUP BY source
LIMIT 3

Ответы [ 7 ]

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

Должно работать следующим образом:

SELECT *
FROM   items
JOIN  (
    SELECT max(item_id) AS item_id
    FROM   items
    WHERE  item_section = 'sp_500'
    GROUP  BY source
    ORDER  BY 1 DESC
    LIMIT  3
    ) i USING (item_id)

Почему?

1) Фильтровать по item_section = 'sp_500'

2) Свернуть несколько элементов с одинаковым source вGROUP BY, потому что:

не имеет дубликатов в столбце источника

Я беру самое большое item_id за source - кажется наиболее вероятным, и выне уточнил.

3) ORDER BY item_id DESC, чтобы получить лучшие из них и LIMIT 3 (без дубликатов к настоящему времени).

4) JOIN к исходной таблице, чтобы получить всю строку для выбранных item_id с.

1 голос
/ 12 марта 2012

Во-первых, order by item_id следует за group by.Общее правило: группировать по ... HAVinG ... упорядочивать по ....

1 голос
/ 12 марта 2012

Прежде всего, вы не можете выбрать все *, когда у вас есть предложение GROUP BY.Вы можете выбрать source в своем запросе и некоторые другие функции, такие как count(*).Во-вторых, вы не можете заказать по item_id.Вы можете заказать по source и некоторым другим функциям.В-третьих, order by должно быть после group by

0 голосов
/ 12 марта 2012

изменить запрос

SELECT *
FROM items
WHERE item_section='sp_500'
GROUP BY source
ORDER BY item_id DESC
LIMIT 3

если результатов нет, попробуйте удалить предложение where или изменить значение item_section, которое вы не можете получить для этого item_section

надеюсь, что этопомогает

0 голосов
/ 12 марта 2012

Используйте это

SELECT * FROM items 
WHERE item_section='sp_500'  
GROUP BY source 
ORDER BY item_id DESC LIMIT 3

Гудлак !!

0 голосов
/ 12 марта 2012

Вы не можете объединить select * и group by.
Если вам просто нужно выбрать уникальные строки, используйте

SELECT DISTINCT item_id, source 
FROM items  
WHERE item_section='sp_500'  
ORDER BY item_id DESC`   
0 голосов
/ 12 марта 2012

Измените это ниже: -

SELECT DISTINCT fieldnames FROM items WHERE item_section='sp_500' GROUP BY source ORDER BY item_id DESC LIMIT 3

Здесь, в DISTINCT, вы должны указать имена полей.

...