Mysql 选择在同一天多次出现的所有行

Mysql 选择在同一天多次出现的所有行,mysql,Mysql,我有一个名为“checkins”的MySQL表和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

我有一个名为“checkins”的MySQL表和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)的行。所以,例如,若一个用户在id为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
 ) 

同一天,我不知道该怎么做,我知道这个查询还远远不够,但这是我能做的最好的查询。

你可以尝试按用户ID签入日期和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

您可以尝试按用户ID签入日期和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

干杯

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

干杯

这差不多了,但它只返回1行pr.group,它怎么能返回每个组的所有行呢?添加了查询以返回所有多次出现的行。如果有的话,请告诉我。这差不多了,但它只返回1行pr.group,它如何返回每个组的所有行?添加了查询以返回所有多次出现的行。如果有的话,请告诉我。这差不多了,但它只返回1行pr.group,它怎么能返回每个组的所有行?这差不多了,但它只返回1行pr.group,它怎么能返回每个组的所有行?