让我先说我不是一个sql专家或jasper-报告专家,但我试图生成一个报告,显示谁登录了我的项目,按公司和客户每月。我还知道,我正在设计查询,以查看未来1个月,这样我就有html" target="_blank">数据来处理一个公司注册创建一个客户端或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;
当然,这是一个简化版本,没有考虑到请求类型和状态,但我认为您可以从这里轻松完成。
如何创建将不同列与不同表合并的视图?例如,我有三个表:用户、物品和礼物(在本例中,这是一个用户可以向另一个用户赠送礼物的系统) < code>users表包含有关用户的信息,< code>items表包含有关项目的信息,< code>gifts表显示哪个用户向哪个用户发送了什么礼物。 我想要的是创建如下视图:
我的轨道环境是 轨道: 3.2.14, 红宝石: 1.9.3, 系统:ubuntu mysql:5.5.32-0ubuntu0.12.04.1 我创建了一个mysql数据库,为了测试这个数据库,我从我在windows中的mysql workbench连接它。所以,我想展示一下,我在ubuntu中的mysql数据库运行正常 但是,当我在浏览器中运行网站时,我得到错误:active record::c
问题内容: 我想从t1中获取名称,并在t2中获得与ID在t1上相同的行数。 到目前为止,我已经掌握了上述内容,但是如果t2中没有匹配的行,它将不会返回任何数据。如果没有行,则我希望将其设置为0(或NULL),并且名称仍然返回。 编辑: 我希望能够按降序排序。(或ASC)可行吗? 问题答案: 这应该为您工作: 左联接确保您拥有t1中的所有行,而COUNT(。)使其仅计算t2.id不为null的记录(
如何创建合并来自两个不同表的不同所有列的视图。 这给了我一个错误: 重复的列名“tID” 有没有一种方法可以连接两个表,而不需要列出所有要选择的值?
通过使用网络管理员配置并提供的配置文件,可以使用连接管理器连接到远程网络。连接所需的大多数配置包含在配置文件中;您需要提供网络凭据。
当然,希望有人能帮助我创建外部配置单元分区表,方法是根据HDFS目录中的逗号分隔文件自动添加数据。我的理解(或缺乏理解)是,当您定义一个已分区的CREATE外部表并为其提供一个位置时,它应该递归地扫描/读取每个子目录,并将数据加载到新创建的已分区的外部表中。下面的内容应该会对我的烦恼提供一些更多的了解… 每个'dt='子目录都包含分隔的文件。