【问题标题】:Write query on sql在sql上写查询
【发布时间】:2021-03-20 06:10:23
【问题描述】:

我有一个 monitoring 表,其中客户 ID 列 ID,应用程序的最后登录日期 Time。我写了一个查询来显示客户在什么时间可以访问系统的表格:时间 - 此时的条目数 - 客户 ID

请求:

select Time, count (*) as Quantity, group_concat (ClientID) from monitoring group by Time;

如何编写以下查询?以相同的形式显示表格,只是现在需要在每次至少有 1 个客户端访问时,显示当时没有访问权限的所有客户端的 id。

更新。

+---------------------+-------------+----------------+
| Time                | Quantity    | ClientID       |                                                                                               
+---------------------+-------------+----------------+                                                                                                             
| 2018-06-14 15:51:03 |       3     | 311,240,528    |                                                                                                    
| 2018-06-14 15:51:20 |       3     | 314,312,519    |                                                                                                    
| 2019-01-14 06:00:07 |       1     | 359            |                                                                                                    
| 2019-08-21 14:30:04 |       1     | 269            |                                                                                                    
+---------------------+-------------+----------------+

这些是当前具有访问权限的客户的 ID。并且您需要显示在特定时间没有访问权限的所有客户的 ID 也就是说,在这种情况下:

+---------------------+-------------+-----------------------------+
| Time                | Quantity    | ClientID                    |                                                                                               
+---------------------+-------------+-----------------------------+                                                                                                            
| 2018-06-14 15:51:03 |           5 | 269,359,314,312,519         |                                                                                                    
| 2018-06-14 15:51:20 |           5 | 311,240,528,359,269         |                                                                                                    
| 2019-01-14 06:00:07 |           7 | 311,240,528,314,312,519,269 |                                                                                                    
| 2019-08-21 14:30:04 |           7 | 311,240,528,314,312,519,359 |                                                                                                    
+---------------------+-------------+-----------------------------+

建议不要考虑日期和时间,而只考虑年和月。但一出来。谢谢。

【问题讨论】:

    标签: mysql sql datetime count subquery


    【解决方案1】:

    您可以使用两个select distinct 子查询的cross join 生成所有可能的客户端和时间组合,然后使用not exists 过滤掉表中存在的那些。最后一步是聚合:

    select t.time, count(*) as quantity, group_concat(c.clientid) as clientids
    from (select distinct time from monitoring) t
    cross join (select distinct clientid from monitoring) c
    where not exists (
        select 1
        from monitoring m
        where m.time = t.time and m.clientid = c.clientid
    )
    group by t.time
    

    我不清楚问题中最后一句是什么意思。上述查询将生成您为示例数据显示的结果。

    【讨论】:

    • t.time, m.time, t.clientid, m.clienid: t & m 是什么意思?
    • 前缀(tcm)是表(或子查询)的别名。
    • 运行查询时显示ERROR 1054 (42S22): Unknown column 't.clientid' in 'where clause'。我做错了什么?
    猜你喜欢
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-24
    相关资源
    最近更新 更多