我们正在使用MySQL作为数据库来存储带有时间戳的消息。是否可以创建返回最近n个工作日消息的查询?
即如果n为4,今天是星期二,我希望从这个星期的星期一开始,在星期五的最后一个星期,在星期四的最后几个星期,在星期三的最后几个星期发消息。
最佳答案
如果您想直接使用mysql进行操作,将会有些复杂。根据Vatev的建议,您应该提前计算日期星号,但是如果您确实要执行此操作,则可能需要以下功能:ADD_DATE
,带有INTERVAL -N WEEKS
FLOOR
,在C int/int
中就可以了MOD
,a % b
:)WEEKDAY
首先,您需要计算应该返回多少周,这很容易...对于您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
)
关于mysql - sql中的最后n个工作日where子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11692490/