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。