Как выбрать отдельные идентификаторы для каждого состояния один раз

#mysql

Вопрос:

Как бы я выбрал идентификаторы на основе значений IN. В основном у меня есть список значений IN, но я хотел бы выбрать только один идентификатор из таблицы для каждого значения IN. Я надеюсь, что это не покажется вам странным, но я пытаюсь добиться вот чего.

идентификатор пользователя аромат Дата
0 Ваниль гггг-мм-дд
1 Ваниль гггг-мм-дд
2 Шоколад гггг-мм-дд
3 Шоколад гггг-мм-дд
4 Карамель гггг-мм-дд
5 Карамель гггг-мм-дд
6 Карамель гггг-мм-дд
7 Ваниль гггг-мм-дд

Из этого списка я хотел бы выбрать каждый вкус, как только это может быть любой из идентификаторов пользователей, здесь я оставил дату пустой, потому что я думаю, что это может быть хорошее поле для поиска, чтобы получить самых последних пользователей, которые зарегистрировались и заполнили опрос для своего любимого вкуса. буду ли я использовать группу по и отдельно с помощью IN? Что-то вроде

 SELECT DISTINCT * FROM `table` WHERE `flavor` IN ('Vanilla,Chocolate,Caramel') 
WHERE `date` 
yesterday GROUP BY flavor
 

Ответ №1:

Код, записанный ниже, создает

  1. таблица под названием «Данные»
  2. содержание таблицы.

После этого происходит выбор записей данных, которые вы ищете.

Запрос выдает следующий результат:

аромат идентификатор пользователя Дата
Ваниль 0 2021-06-07 20:00:00
Шоколад 2 2021-06-06 20:00:00
Карамель 4 2021-06-07 20:00:00
         CREATE TABLE Data (
        user_id INT,
        flavor VARCHAR(50),
        date TIMESTAMP);
    
    INSERT INTO Data (user_id ,flavor, date) VALUES (0,'Vanilla', '2021-06-07 20:00:00'), 
    (1,'Vanilla', '2021-06-06 20:00:00'), (2,'Chocolate', '2021-06-06 20:00:00'), 
    (3,'Chocolate', '2021-06-06 19:00:00'), (4,'Caramel', '2021-06-07 20:00:00'), 
    (5,'Caramel', '2021-06-06 20:00:00'),
    (6,'Vanilla', '2021-06-05 20:00:00'), (7,'Chocolate', '2021-06-05 20:00:00'), 
    (7,'Vanilla', '2021-06-05 20:00:00') ;
    
    SELECT 
    d.flavor, d.user_id, d.date
FROM
    Data d
        INNER JOIN
    (SELECT 
        flavor, MAX(date) AS latestDate
    FROM
        data
    GROUP BY flavor) lD ON ld.flavor = d.flavor
WHERE
    d.date = ld.latestDate
        AND d.flavor IN ('Vanilla' , 'Chocolate', 'Caramel');