@pavlikmd

Как вывести записи по дате и без дублей из MySQL?

Здравствуйте, есть задача, в базе около 14 млн записей, есть записи которые одинаковые только отличаются датой, надо вывести одну запись с последней датой.

делаю вот так
$tableRows = $db->getAll("SELECT * FROM `dk_products` WHERE article = $article GROUP BY brand ORDER BY STR_TO_DATE(date,'%d.%m.%Y') DESC");

Выводит одну но только саму первую дату
5af040fbd2739892476909.png

Если же уберу GROUP BY то выводит правильно, но надо только одну
5af0415a06e98285115172.png

Поставить LIMIT 1 тоже не вариант, так как могу быть 2 разных бренда с одинаковым артикулом.

Суть надо вывести последнюю запись которая ближе к сегодняшней дате.

Использую SafeMySql.
  • Вопрос задан
  • 713 просмотров
Решения вопроса 1
@pavlikmd Автор вопроса
Сделал тип поля 'date' в MySQL и вывел так:

SELECT * FROM `dk_products` WHERE article = $article GROUP BY brand ORDER BY date DESC
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
group by concat(brand, date) order by date desc
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `t1`.*
  FROM `dk_products` AS `t1`
  LEFT JOIN `dk_products` AS `t2` ON `t1`.`article` = :article 
    AND `t2`.`article` = :article 
    AND `t2`.`brand` = `t1`.`brand`
    AND `t2`.`date` > `t1`.`date`
  WHERE `t2`.`article` IS NULL


SELECT `t2`.*
  FROM (
    SELECT `brand`, MAX(`date`) AS `date`
    FROM `dk_products`
    WHERE `article` = :article
    GROUP BY `brand`
  ) AS `t1`
  JOIN `dk_products` AS `t2` ON `t2`.`article` = :article
    AND `t2`.`brand` = `t1`.`brand`
    AND `t2`.`date` = `t1`.`date`
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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