Sql-Server-2008
這兩個查詢有什麼區別?
我們有這兩個查詢:
select jsh.jobid, max(jsh.Audit_CreatedDate) from JobStatusHistories jsh join Jobs j on j.JobId = jsh.JobId where j.JobStatusId = 11 and jsh.Audit_CreatedBy <> 'Archiver' and jsh.Audit_CreatedDate < '5/9/2015' group by jsh.jobid
和
select jsh.jobid from JobStatusHistories jsh join Jobs j on j.JobId = jsh.JobId where j.JobStatusId = 11 and jsh.Audit_CreatedBy <> 'Archiver' group by jsh.jobid having MAX(jsh.Audit_CreatedDate) < '5/9/2015'
第一個返回 530 萬條記錄,第二個返回 430 萬條記錄。
目標是獲取作業狀態為 11 且已在 5 個多月前(舊)修改但最近可能已被存檔器修改的作業 ID 列表,因此我們希望忽略這些。
簡化的數據可能如下所示:
JobId Audit_CreatedDate Audit_CreatedBy 234 3/25/2015 Importer 234 9/25/2015 Archiver 456 8/25/2015 Importer 456 9/25/2015 Archiver 789 3/25/2015 Importer 789 4/25/2015 Archiver
我們希望回來:
JobId Audit_CreatedDate 234 3/25/2015 789 3/25/2015
不幸的是,這兩個查詢都返回了很多結果,很難看出哪個在做我們想要的。
不同之處在於第一個查詢將包含這樣的作業:
jobId Audit_CreatedDate ------- ----------------- 1 2015-04-01 1 2015-06-01
第一行將包含在查詢中,但第二行將不包含在內。這是因為該工作中至少有一行符合 where 子句
< May 9th
(或者是 9 月 5 日?請使用非區域性、明確的日期文字)。這個相同的作業將完全從第二個查詢中排除,因為過濾器有效地應用於聚合,而不是單獨的行。
MAX(date) = June 1st
在這種情況下,因此作業被作為一個整體拋出,而不僅僅是 rows> May 9
。哪個查詢是正確的?誰知道?您需要提供有關您的實際要求的更多詳細資訊-您目前的單詞問題不夠明確,我無法理解。並不是說任何使用者或客戶端都可以使用 4.3 或 530 萬行。