我們使用MySQL作爲我們的數據庫來存儲具有時間戳的消息。是否可以創建一個返回最近n個工作日消息的查詢?最後n個工作日在sql中,其中clausel
I.e.如果n是4,今天是星期二,我希望從本週一,週五上週,週四上週和週三上週幾周發出消息。
我們使用MySQL作爲我們的數據庫來存儲具有時間戳的消息。是否可以創建一個返回最近n個工作日消息的查詢?最後n個工作日在sql中,其中clausel
I.e.如果n是4,今天是星期二,我希望從本週一,週五上週,週四上週和週三上週幾周發出消息。
行。作爲Vatev建議您應該計算日期星日期提前,但如果你真的想這樣做,你可能需要以下功能:
˚F所有你需要的應該算你應該有多少個星期回去的IRST,很簡單...對於你one week = 5 days
,這意味着
weeks = FLOOR(days/5)
我們已經採取了幾個星期的照顧,所以我們現在必須一起工作休息:
rest = days MOD 5
現在我們有兩種情況,週末已經發生或沒有,因爲這有沒有的情況下週末都不錯。我們必須添加2天才能跳過它。週末發生,如果(WEEKDAY(now) - rest) < 0
rest = IF((WEEKDAY(now) - rest) < 0, rest + 2, rest)
而現在我們可以把它建立一個標準桿(讓我們假設你有{days}
和{rest}
預先計算):
WHERE date >= ADD_DATE(
ADD_DATE (
{now},
INTERVAL -IF((WEEKDAY({now}) - {rest}) < 0, {rest} + 2, {rest}) DAYS,
),
INTERVAL -FLOOR({days}/5) WEEKS
)
你有沒有試過類似的東西?
SELECT columns
FROM table
WHERE datediff(column_with_timestamp,NOW()) > n
其中,N的定義與上面定義的一樣,爲您尋找的天數。
工作日,不包括週末。 – Vyktor 2012-07-27 17:20:20
我能想出的計算起始日期(查詢{START_DATE})在您所選擇的語言,然後運行這樣最好:
SELECT some_things
FROM your_table
WHERE
WEEKDAY(time_column) < 5
AND time_column >= {start_date}
ORDER BY time_column DESC
你也可以做一個存儲函數計算'x日前的日期'並將其用於{start_date}。
非常好的建議,謝謝。 – Thomas 2012-07-27 18:09:13
COL >= date_sub(NOW(), interval 1 week) and
weekday(COL) < 5
感謝您的詳細解釋。正如Vatev指出的那樣,我想我會在我的應用程序中計算開始日期,以便從db中施加一些壓力。 – Thomas 2012-07-27 18:10:54
從這個操作對數據庫的壓力可以忽略不計,但如果你用一種更加健全的語言來做,它可能會減少很多壓力:P – Vatev 2012-07-27 18:20:04
@Thomas我寫了它,所以我可以重用任何其他語言特別是PHP接受(在['strtotime'](http://php.net/manual/en/function.strtotime.php))間隔和邏輯是相同的。你甚至可以做'timestamp() - 星期* 7天* 24小時* 3600秒'來節省一些小資源。 – Vyktor 2012-07-27 18:26:36