我们正在使用MySQL作为数据库来存储带有时间戳的消息。是否可以创建返回最近n个工作日消息的查询?

即如果n为4,今天是星期二,我希望从这个星期的星期一开始,在星期五的最后一个星期,在星期四的最后几个星期,在星期三的最后几个星期发消息。

最佳答案

如果您想直接使用mysql进行操作,将会有些复杂。根据Vatev的建议,您应该提前计算日期星号,但是如果您确实要执行此操作,则可能需要以下功能:


ADD_DATE,带有INTERVAL -N WEEKS
FLOOR,在C int/int中就可以了
MODa % 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/

10-10 09:18