SQL 查询:从 test
表中获取本月的数据,并对数量最多的前10个流程按数量升序排序
假设表结构
test
表包含请求信息。workflow_base
包含流程的基本信息。
CREATE TABLE test (requestid INT, -- 请求IDworkflowid INT, -- 流程IDcurrentnodetype CHAR(1),-- 当前节点类型createdate DATE, -- 创建日期creater INT -- 创建者ID
);
SQL 查询
-- 选择前10条记录并按数量升序排序
SELECT *
FROM (-- 选取数量最多的前10条记录SELECT TOP 10 *FROM (-- 子查询:计算每个流程的独特请求数量SELECT b.workflowname AS 流程,COUNT(DISTINCT a.requestid) AS 数量 FROM test a LEFT JOIN workflow_base b ON a.workflowid = b.idWHERE-- 筛选本月数据a.createdate >= DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1)AND a.createdate < DATEADD(MONTH, 1, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1))GROUP BY b.workflowname) t1-- 按数量降序排列以选出前10条记录ORDER BY 数量 DESC
) t2
-- 对选出的前10条记录按数量升序排列展示
ORDER BY 数量 ASC;
解释
- 子查询(t1):
- 计算每个流程的独特请求数量。
- 使用 LEFT JOIN 连接到 workflow_base 表来获取流程名称。
- 使用 DATEFROMPARTS 和 DATEADD 函数筛选出本月的数据。
- 按 b.workflowname 分组统计请求数量。
- 中间查询(t2):
- 从子查询结果中选取数量最多的前10条记录。
- 使用 TOP 10 和 ORDER BY 数量 DESC 实现。
- 最外层查询:
- 对选出的前10条记录按数量升序排列展示。
- 使用 ORDER BY 数量 ASC。