首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL帮助连接表以创建

MySQL帮助连接表以创建
EN

Stack Overflow用户
提问于 2016-05-17 19:18:23
回答 1查看 246关注 0票数 0

让我首先说我不是sql专家或jasper-reports专家,但我正在尝试生成一个报告,显示每月按公司和客户登录我的项目的人。我还知道,我正在设计这个查询,以便在未来的一个月中看到数据,这样我就可以处理一家公司注册创建一个或2个客户端,然后不登录或做任何事情的可能性。

这就是我希望返回的数据看起来是什么样子:

代码语言:javascript
复制
 Date       Company    Client    Client_ID     Authentications    Unique_Users
 2016-may   Company-A  client-1        1             24                 1
 2016-may   Company-A  client-2        2             10                 2
 2016-may   Company-A  client-3        3             0                  0
 2016-June   Company-A  client-1       1             0                  0
 2016-June   Company-A  client-2       2             0                  0
 2016-June   Company-A  client-3       3             0                  0

我有一个查询,它将返回发生操作的日期、公司名称、客户名称、客户id、作者和唯一用户。此查询省略了没有身份验证的行。

代码语言:javascript
复制
SELECT
     DATE_FORMAT(rq.requestTime, '%Y-%M') AS Date,
     company.name AS Company,
     client.name AS Client,
     client.id AS client_id,
     COUNT(rq.id) AS Authentications,
     COUNT(DISTINCT rq.personguid) AS Unique_Users         
FROM
company JOIN CLIENT ON company.id = client.company_id  
    LEFT JOIN request_queue rq ON rq.clientid = client.id
WHERE
 company.id = 19
 AND rq.status = 'complete' AND rq.request_type LIKE "%authorize%" 
     AND MONTH(rq.requestTime) >= MONTH("2016-05-01") 
     AND MONTH(rq.requestTime) <= MONTH("2016-06-01")
GROUP BY
     client_id, Date
ORDER BY Date ASC, client_id ASC;

这将返回类似的内容,因为有些客户端在5月和6月还没有登录记录,基本上没有request_queue数据--没有行:

代码语言:javascript
复制
 Date       Company    Client    Client_ID     Authentications    Unique_Users
 2016-may   Company-A  client-1        1             24                 1
 2016-may   Company-A  client-2        2             10                 2

在这一点上,我想到了这个。

代码语言:javascript
复制
SELECT
dateTable.mydate AS Date,
clientTable.ClientName AS Client,
clientTable.CompanyName AS Company,
clientTable.client_id AS Client_ID
FROM
(SELECT 
client.name AS ClientName, 
client.id AS client_id,
company.name AS CompanyName 
FROM 
company JOIN CLIENT ON company.id = client.company_id 
WHERE company.id = 19) clientTable
JOIN
(SELECT 
DATE_FORMAT(temp.thedate,'%Y-%M') AS mydate, 
temp.thedate AS theDate FROM (
        SELECT 
    DATE_ADD("2016-05-01", INTERVAL u.i MONTH) AS thedate
        FROM i AS u ORDER BY thedate) temp
        WHERE temp.thedate <= "2016-06-01") dateTable;

这为我提供了一个没有request_queue数据的表,该表有日期、公司名称、客户名称和客户ids。

这张桌子看起来是这样的:

代码语言:javascript
复制
Date       Company    Client    Client_ID
2016-may   Company-A  client-1        1
2016-may   Company-A  client-2        2
2016-may   Company-A  client-3        3
2016-June   Company-A  client-1       1
2016-June   Company-A  client-2       2
2016-June   Company-A  client-3       3

有没有办法组合这些数据,使图表位于这篇文章的顶部?

附加信息:目标是将我的查询结果传递给jasper报表设计器ireport。我使用这些数据创建了一个交叉表,上面有日期,左边是客户端,然后将身份验证放在交叉行中。

我从大学开始就没接触过sql了。如有任何想法或指导,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-19 14:30:19

从您的上一个查询开始,我一直在按自己的方式工作,这似乎产生了您需要的东西:

代码语言:javascript
复制
SELECT
    dateTable.mydate AS Date,
    clientTable.ClientName AS Client,
    clientTable.CompanyName AS Company,
    clientTable.client_id AS Client_ID,
    COUNT(rq.id) AS Authentications,
    COUNT(DISTINCT rq.personguid) AS Unique_Users  
FROM
(SELECT 
    client.name AS ClientName, 
    client.id AS client_id,
    company.name AS CompanyName 
    FROM company JOIN CLIENT ON company.id = client.company_id 
    WHERE company.id = 19) clientTable
JOIN (SELECT 
    DATE_FORMAT(temp.thedate,'%Y-%M') AS mydate, 
    temp.thedate AS theDate
    FROM (SELECT
            DATE_ADD("2016-05-01", INTERVAL u.i MONTH) AS thedate
            FROM i AS u ORDER BY thedate) temp
            WHERE temp.thedate <= "2016-06-01") dateTable
LEFT JOIN request_queue rq on (rq.clientid = clientTable.client_ID and DATE_FORMAT(rq.requestTime,'%Y-%M') = dateTable.mydate)
GROUP BY Client_ID, Date
ORDER BY Date ASC, Client_ID ASC;

当然,这是不考虑请求类型和状态的简化版本,但我认为您可以轻松地从这里开始工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37284565

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档