mysql - sql where 子句中的最后 n 个工作日

标签 mysql timestamp period

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

即如果 n 是 4 并且今天是星期二,我想要本周星期一、上周星期五、上周星期四和上周星期三的消息。

最佳答案

如果你想直接用mysql来做这件事会有点复杂。正如 Vatev 建议的那样,您应该提前计算日期星日期,但如果您确实想这样做,您可能需要以下函数:

首先你需要计算一下你应该回去多少周,这很容易......对你来说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 where 子句中的最后 n 个工作日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11692490/

相关文章:

sql - 不相关的表和时间间隔

awk - 在周期中划分一列并在 awk 中打印每个列的最小值最大值

java - 解析 AMAZON.DURATION 插槽类型的 ISO-8601 持续时间值

mysql - 为什么以及在哪里使用索引 - 优点和缺点

php - Symfony 3 和 Doctrine 链接表

具有 UPDATE 条件的 MySQL 触发器

c# - 每天首次调用app时添加文字提示?

timestamp - 在 AutoHotkey 中获取毫秒数

batch-file - 批处理日期时间戳比较

mysql - MySQL 中名为 Status 的列