#mysql #sql
#mysql #sql
Вопрос:
Итак, у меня следующая таблица closing_days:
ID | Имя | Дата | kdv_id |
---|---|---|---|
1 | foo | 2021-02-16 | 1 |
2 | бар | 2021-02-16 | 2 |
3 | база | 2021-02-16 | 3 |
4 | qux | 2021-02-17 | 3 |
Идентификатор, имя, дата, kdv_id, где kdv_id представляет местоположение.
Я хочу вернуть дату из closing_day, которая является общей для всех местоположений за определенный период. Мне сказали, что это можно сделать только путем запроса, но я просто не могу найти способ сделать это.
На данный момент у меня есть следующее:
SELECT DISTINCT date FROM closing_day
WHERE kdv_id IN (1, 2, 3)
AND datum >= '2021-02-15'
AND datum <= '2021-02-19'
Единственная проблема здесь заключается в том, что если одно из местоположений имеет дату в этом периоде, оно возвращается.
Я хочу возвращать дату только в том случае, если во всех местоположениях эта дата указана как closing_day.
Переход от образца данных: 2021-02-16 и 2021-02-17 будут возвращены оба.
Желаемый результат из образца данных: 2021-02-16
Насколько я вижу, мой единственный вариант — выбрать все даты из таблицы (то есть не только отдельные) и отслеживать все записи в массиве, и если день закрытия равен количеству (местоположениям) раз в массиве, это обычный день закрытия. Но да, это делается не только путем запроса.
Комментарии:
1. Пожалуйста, предоставьте образцы данных и желаемые результаты.
2. добавлены примеры данных и желаемых результатов
Ответ №1:
Вы хотите GROUP BY
с HAVING
предложением:
SELECT date
FROM closing_day
WHERE kdv_id IN (x, y, z) AND
datum >= '2021-02-15' AND
datum <= '2021-02-19'
GROUP BY date
HAVING COUNT(DISTINCT kdv_id) = 3 -- number of items in `IN` list