【问题标题】:sql query to check multiple data appear on different fields for multiple times用于检查多个数据多次出现在不同字段上的sql查询
【发布时间】:2013-10-14 15:38:44
【问题描述】:

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

| 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 个)相同用户在同一天一起登录的次数

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

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你可以这样做:

    Select count(username)
    form yourTable
    where yourDate between 2011/02/25 and 2011/02/27
    

    【讨论】:

    • 嗨,我想到了,但它没有告诉我谁和谁登录,我还需要检查所有可能的用户组合,但我不需要结果中的日期,只需要计数即可没事
    【解决方案2】:

    Here is SQLFiddel Demo

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

    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
    

    【讨论】:

      【解决方案3】:

      GROUP BY 是你的朋友:

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

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

      【讨论】:

        猜你喜欢
        • 2020-02-22
        • 2012-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-31
        • 1970-01-01
        • 1970-01-01
        • 2012-03-23
        相关资源
        最近更新 更多