#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:
Код, записанный ниже, создает
- таблица под названием «Данные»
- содержание таблицы.
После этого происходит выбор записей данных, которые вы ищете.
Запрос выдает следующий результат:
аромат | идентификатор пользователя | Дата |
---|---|---|
Ваниль | 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');