簡體   English   中英

如何提取一月份的上個月數據

[英]How to pull previous month data for in January

我有一個嵌入式查詢,用於提取上個月的數據。 到本月(一月)為止,一切都運轉良好。 我的代碼如下所示:

(MONTH(CURRENT DATE)-1) = MONTH(TSTAMP)

之所以這樣設置,是因為我的數據中有一個基於查詢的時間戳。 這通常像一種魅力,但本月不起作用,我認為是因為新年。 當處理不同的年份時,此功能如何工作? 有沒有一種方法可以將其寫入查詢中,因此我不必擔心年份的變化?

您可以使用年份來完成此操作,如下所示:

YEAR(CURRENT DATE) * 12 + MONTH(CURRENT DATE) - 1 = YEAR(TSTAMP) * 12 + MONTH(TSTAMP)

從本質上講,這會將日期轉換為從時間0開始的月份-因此-1很有意義。

進行此操作的正確方法是使用范圍查詢(一個也具有排他上限的< ),因此,如果數據庫可用,則數據庫可以自由使用索引。
可以通過以下方法輕松檢索本月的第一天:

CURRENT_DATE - (DAY(CURRENT_DATE) - 1) DAYS

(減去當前日期與月初之間的天數差)

這為查詢提供了一個極好的上限條件:

WHERE tStamp < CURRENT_DATE - (DAY(CURRENT_DATE) - 1) DAYS

(在本月初之前獲取所有內容)。

但是,由於我們實際上只對上個月感興趣,因此我們還需要限制下限。 那么這一切都因為,或者,該月的開始......因為我們已經可以得到當月的開始:

WHERE tStamp >= CURRENT_DATE - (DAY(CURRENT_DATE) - 1) DAYS + 1 MONTH
      AND tStamp < CURRENT_DATE - (DAY(CURRENT_DATE) - 1) DAYS


有一種相關的方法,假設您有一個帶有適當索引的日歷表。 如果您的最小表包含以下列:

 calendarDate - DATE year - INTEGER month - INTEGER dayOfMonth - INTEGER 

...您可以使用此表獲取相關值:

 WHERE tStamp >= (SELECT calendarDate FROM calendarTable WHERE year = YEAR(CURRENT_DATE - 1 MONTH) AND month = MONTH(CURRENT_DATE - 1 MONTH) AND dayOfMonth = 1) AND tStamp < (SELECT calendarDate FROM calendarTable WHERE year = YEAR(CURRENT_DATE) AND month = MONTH(CURRENT_DATE) AND dayOfMonth = 1) 

(有幾種不同的形式,但這看起來很簡單)

暫無
暫無

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

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