輕鬆最有效的方法(在我看來),作爲你的狀態,開始與所有日期的表。你必須創建自己,假設你所做的一切,這裏有一對夫婦爲你的選擇......
SELECT
*
FROM
calendar -- Your manually created table of dates
LEFT JOIN
yourTable
ON yourTable.DateField = calendar.DateField
WHERE
yourTable.DateField IS NULL
AND calendar.DateField >= @reportFirstDate
AND calendar.DateField <= @reportLastdate
或者......
SELECT
*
FROM
calendar -- Your manually created table of dates
WHERE
NOT EXISTS (SELECT * FROM yourTable WHERE yourTable.DateField = calendar.DateField)
AND calendar.DateField >= @reportFirstDate
AND calendar.DateField <= @reportLastdate
編輯
儘管維護這個日期列表可能會感到「不整潔」,但它對這種類型的查詢具有巨大的性能優勢。
隨着日期表,你正在看兩個索引,並檢查一個存在但不是另一個。
沒有你有一個更復雜的方法日期表...
1.抓住每一次記錄在表
2.自其加入到下一條記錄在表
3.如果是連續的日期,丟棄(保存記錄與他們之間的間隙)
4.遍歷每對,在缺少日期填寫
5.處理日期在您的報告期開始(無日期1在對失蹤)
6.處理報告期結束時遺失的日期(對中沒有日期2)
用日期創建臨時表可能實際上更快,以直接的方式創建臨時表,然後再次刪除表。如果是這樣的話,爲什麼不只是維護日期表?
- 只要有100年的表,而忘記了它
- 有代碼非常快一點,以保持日期最新的所有代碼
如果你不相信,我會建議試用不同的選項,並且自己看看索引日期表與其他選項比較有多快。
(更不用提多少短,可讀性和可維護性)
請標記提供相應的數據庫你的問題,不是所有的人...... – RedFilter
不同的數據庫,不同的答案 - 挑一個,雖然有對如此衆多的重複。 –