MySQL 帮助连接表以制作 jasper ireport

标签 mysql sql jasper-reports crosstab

首先我要说的是,我不是 sql 专家或 jasper-reports 专家,但我正在尝试生成一份报告,显示每月按公司和客户登录我的项目的人员。我还知道,我正在设计查询以展望 future 1 个月,以便我有数据来处理 A 公司注册创建一个或 2 个客户,然后不登录或执行任何操作的情况。

这就是我希望返回的数据的样子:

 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、身份验证和唯一用户。此查询会忽略没有身份验证的行。

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数据没有行:

 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

此时我想出了这个。

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;

这为我提供了一个表,其中包含日期、公司名称、客户名称和客户 ID,但没有 request_queue 数据。

该表如下所示:

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。任何想法或指导将不胜感激。

最佳答案

我已经按照您上次查询的方式进行了工作,这似乎产生了您需要的内容:

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;

当然,这是简化版本,没有考虑请求类型和状态,但我认为您可以从这里轻松完成它。

关于MySQL 帮助连接表以制作 jasper ireport,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37284565/

相关文章:

MySQL Update 查询需要更多时间来更新表

mysql - SQL:如何比较表,即计算连接表中的行数?

MySQL View 、联合和分组依据

mysql - 在mysql中使用GROUP BY时如何选择最长的文本字段,a la MAX()?

mysql - 计算移动平均 MySQL?

jasper-reports - 仅在首页上打印页脚

php - 从数据库回显 BLOB (utf-8)

mysql - SQL 查询以显示对 "total"列的更改

java - 我如何遍历 Jasper 中的列表?

java - JaperReport maven Pom.xml 未创建.jasper 文件