1

假设我有一个记录登录日期的表,其中包含日期和用户名列

| Date  | Username  |
---------------------
| 09/10 | a         |
| 09/10 | b         |
| 09/10 | c         |
| 10/10 | b         |
| 10/10 | c         |
| 11/10 | c         |
| 11/10 | a         |
| 12/10 | b         |
| 12/10 | c         |
| 13/10 | a         |
| 13/10 | c         |
| 14/10 | a         |
| 14/10 | b         |
| 14/10 | c         |
| 15/10 | a         |
| 15/10 | b         |
| 16/10 | a         |
| 16/10 | b         |
| 16/10 | c         |

我可以知道如何进行查询,告诉我某组(至少 2 个)相同用户在同一天一起登录的次数

结果应该告诉我:例如。用户 ab 和 c 在 3 个日期(9 日、14 日、16 日)同时登录,用户 a 和 c 在 9 日、11 日、13 日、14 日、16 日同时登录,用户 b 和 c.... 等等

4

3 回答 3

0

你可以做类似的事情:

Select count(username)
form yourTable
where yourDate between 2011/02/25 and 2011/02/27
于 2013-10-14T06:56:09.330 回答
0

这是 SQLFiddel 演示

以下是您可以尝试的示例:

CREATE TABLE Table1
    (`Date` varchar(5), `Username` varchar(1))
;

INSERT INTO Table1
    (`Date`, `Username`)
VALUES
    ('09/10', 'a'),
    ('09/10', 'b'),
    ('09/10', 'c'),
    ('10/10', 'b'),
    ('10/10', 'c'),
    ('11/10', 'c'),
    ('11/10', 'a'),
    ('12/10', 'b'),
    ('12/10', 'c'),
    ('13/10', 'a'),
    ('13/10', 'c'),
    ('14/10', 'a'),
    ('14/10', 'b'),
    ('14/10', 'c'),
    ('15/10', 'a'),
    ('15/10', 'b'),
    ('16/10', 'a'),
    ('16/10', 'b'),
    ('16/10', 'c')
;

Create View V_Table1 as
select  * from Table1 order by date,username;

select groups,group_concat(date) as dates
 from  (
select date,group_concat(username) groups
  from V_Table1 T
 Group BY date
) T2
group by groups
order by groups
于 2013-10-14T07:30:08.723 回答
0

GROUP BY是你的朋友:

SELECT `date`, GROUP_CONCAT(username)
  FROM logins
GROUP BY `date`
HAVING COUNT(username) > 1;

换句话说:按日期分组并打印它们。在这种情况下,HAVING将删除任何只有一个用户的登录日期(尽管您的示例数据中没有任何登录日期)。

于 2013-10-14T07:31:20.733 回答