如何在SQL Server 中擷取上個月的記錄
要取得特定時段的記錄,常見的做法是使用範圍查詢具有包容性下限和上限。然而,這種方法帶來了兩個挑戰:損害索引利用率並可能選擇意外的資料。
1.索引利用率:
將函數應用於搜尋列,包括強制轉換等隱式函數,可以強制最佳化器忽略該列上的索引,從而導致對每個記錄進行線性搜尋。考慮時間戳,它通常儲存為按時間順序計數。從此類時間戳中提取日期部分需要複雜的計算,從而減慢查詢速度。
2.意外資料:
包含的上限範圍(例如
正確方法:
要解決這些問題,請使用以下查詢結構:
WHERE date_created >= @startOfPreviousMonth AND date_created < @startOfCurrentMonth
要確定上個月和當前月份的開始,請使用以下命令計算:
@startOfPreviousMonth = DATEADD(month, -1, @startOfCurrentMonth) @startOfCurrentMonth = DATEADD(month, DATEDIFF(month, 0, CURRENT_TIMESTAMP), 0)
這種方法確保了索引利用率和準確的資料選擇。完整的腳本為:
DECLARE @startOfCurrentMonth DATETIME SET @startOfCurrentMonth = DATEADD(month, DATEDIFF(month, 0, CURRENT_TIMESTAMP), 0) SELECT * FROM Member WHERE date_created >= DATEADD(month, -1, @startOfCurrentMonth) AND date_created < @startOfCurrentMonth
透過對單一值僅執行一次日期操作,最佳化器可以利用索引,並且查詢傳回正確的資料。
以上是如何在SQL Server中有效率地檢索上個月的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!