У меня есть одна таблица MySQL с именем "checkins" и 4 столбцами.
id | userIDFK | checkin_datetime | shopId
------------------------------------------------
1 | 1 | 2018-01-18 09:44:00 | 3
2 | 2 | 2018-01-18 10:32:00 | 3
3 | 3 | 2018-01-18 11:19:00 | 3
4 | 1 | 2018-01-18 17:57:00 | 3
5 | 1 | 2018-01-18 16:31:00 | 1
6 | 1 | 2018-01-19 08:31:00 | 3
В основном я хочу найти строки, в которых пользователи регистрировались более одного раза (> = 2) в тот же день и в том же магазине. Так, например, если пользователь проверяет, как в строках с идентификаторами 1 и 4 (тот же пользователь, тот же день, тот же магазин), запрос должен возвращать хит со всеми строками (id, userIDFK, checkin_datetime, shopId). Надеюсь, это имеет смысл.
Я уже пробовал использовать
SELECT id, userIDFK, checkin_datetime, shopId
FROM (
SELECT * FROM 'checkins' WHERE COUNT(userIDFK)>=2 AND COUNT(shopId)>=2
)
В тот же день у меня нет никаких навыков, как это сделать, и я знаю, что этот запрос ушел, но это лучшее, что я мог.
Любая помощь?
Спасибо за ваше время
Вы можете попробовать группировать по userId checkin_date и shopID
SELECT userIDFK, checkin_datetime, shopId,COUNT(SHOPiD)
FROM checkins
GROUP BY userIDFK, DATE(checkin_datetime), shopId
HAVING COUNT(SHOPID)>1
РЕДАКТИРОВАТЬ
Вы можете включить подзапрос, чтобы получить все строки:
select b.id,b.userIDFK, b.checkin_datetime, b.shopId
from checkins b
where (SELECT COUNT(SHOPiD)
FROM checkins a
where a.userIDFK=b.userIDFK and date(a.checkin_datetime)=date(b.checkin_datetime) and a.shopId=b.a.shopId
GROUP BY userIDFK, DATE(checkin_datetime), shopId)>1
GROUPBY
можно использовать для получения множественных вхождений.
SELECT id, userIDFK, checkin_datetime, shopId
FROM checkins
GROUP BY userIDFK, DATE(checkin_datetime), shopId
HAVING count(id) > 1;
Надеюсь, поможет!
РЕДАКТИРОВАТЬ:
Используя внутреннее соединение, вы можете достичь этого. Вот запрос:
SELECT c1.* FROM checkins c1 INNER JOIN checkins c2
ON c1.userIDFK = c2.userIDFK
AND date(c1.checkin_datetime) = date(c2.checkin_datetime)
AND c1.shopId = c2.shopId
AND c1.id != c2.id
Ура !!