SQL看最多的数据,但想从小到大排列看趋势
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。
 
