簡體   English   中英

如果年份和月份是單獨的列,則獲取當前和上個月的數據,

[英]Get current and last month data if year and month are separate columns,

我正在嘗試將當前和上個月的數據導入表中。 在導入數據之前,我要刪除所有當前月份數據以及上個月數據。 我遇到的問題是,年份和月份是單獨的列。 在大多數情況下,在導入新數據之前,我可以使用以下語句刪除舊數據:

DELETE FROM MyTable 
WHERE YearColumn = YEAR(GETDATE()) AND MonthColumn >= MONTH(DATEADD(MM, - 1, (GETDATE())))

但是,此聲明的問題是一月份來臨時會發生什么。 說,在明年一月,此語句將刪除YearColumn = 2016和MonthColumn> = 12的所有記錄,而我想刪除YearColumn = 2015和MonthColumn> = 12以及YearColumn = 2016和MonthColumn的所有記錄> = 1。

最好的方法是什么? 我對where子句中的case語句有一些想法,但似乎會很復雜,並且可能也會很慢。

謝謝,

您可以對年份應用與對月份相同的邏輯:

DELETE FROM MyTable 
WHERE YearColumn = YEAR(DATEADD(month, - 1, GETDATE())) AND
      MonthColumn >= MONTH(DATEADD(month, - 1, GETDATE()))

注意:我更喜歡拼寫日期部件名稱,而不是使用縮寫。 這樣,對於MM是幾個月還是幾分鍾,沒有人需要三思。

一個case表達式也可以。 我懷疑你有很多煩惱。

DELETE FROM MyTable 
WHERE
             YearColumn =  YEAR(DATEADD(month, -1, GETDATE()))
        AND MonthColumn = MONTH(DATEADD(month, -1, GETDATE()))
    OR       YearColumn =  YEAR(GETDATE())
        AND MonthColumn = MONTH(GETDATE());

如果確實存在性能問題,則可以嘗試添加額外的可調節條件:

DELETE FROM MyTable 
WHERE
    (
                 YearColumn =  YEAR(DATEADD(month, -1, GETDATE()))
            AND MonthColumn = MONTH(DATEADD(month, -1, GETDATE()))
        OR       YearColumn =  YEAR(GETDATE())
            AND MonthColumn = MONTH(GETDATE())
    )
    /* this might help with performance issues */
    AND YearColumn >= YEAR(DATEADD(month, -1, GETDATE());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM