【问题标题】:How to get all the data starting current week of monday to saturday only using mysql如何仅使用mysql获取从周一到周六开始的所有数据
【发布时间】:2023-04-08 17:46:01
【问题描述】:

我对mysql有疑问,如何从周一到周六获取本周的所有数据。假设今天的日期是 2020 年 10 月 5 日(星期一),我想获得的唯一数据是从 2020 年 10 月 5 日开始到 2020 年 10 月 10 日

目标:仅从本周的周一到周六获取数据。

这里有我已经创建的示例脚本。

$flavors_breakdown_summary_report = DB::select('
SELECT item
     , item_category
     , unit
     , SUM(item_qty) as flavors_item_qty
     , op.receipt_code
     , created_at
     , is_payment_submit 
  FROM order_process as op
  LEFT 
  JOIN
    ( SELECT receipt_code
 , status
 , is_payment_submit 
  FROM order_process_reference) opr 
    ON op.receipt_code = opr.receipt_code
    WHERE op.item_category = ? 
   AND yearweek(DATE(op.created_at), 1) = yearweek(curdate(), 1) 
   AND is_payment_submit = ? 
   AND opr.status = ?  
 GROUP 
    BY item 
 ORDER 
    BY item ASC
',['Flavored','1','Stock']);

输出:

如您所见,创建的订单日期是 2020 年 9 月 28 日 - 我们国家今天的日期是 2020 年 10 月 4 日。这意味着这个脚本是错误的。

【问题讨论】:

标签: mysql sql datetime where-clause


【解决方案1】:

仅获取本周从星期一到星期六的数据。

考虑:

where op.created_at >= current_date - interval weekday(current_date) day
  and op.created_at < current_date - interval (weekday(current_date) - 6)  day 

【讨论】:

  • 让我试试这个,但会给你喜欢的。如果你有一个样本小提琴更好,看看这是否运作良好。谢谢。
【解决方案2】:

您的查询是正确的。
'2020-09-28' 是星期一,是本周的第一天,'2020-10-04' 是星期日,也是本周的最后一天。
所以这两个日期属于同一周。

但您不想要周日的结果,因此使用函数DAYOFWEEK() 添加另一个排除周日的条件:

AND yearweek(DATE(op.created_at), 1) = yearweek(curdate(), 1)
AND DAYOFWEEK(DATE(op.created_at)) <> 1 -- not a Sunday

【讨论】:

  • 嗨forpas,你有样品小提琴或样品创建日期。证明?如果是这样,非常感谢。
  • @DevGe 证明什么?今天是星期天。因此,当您今天运行代码时,您会得到从 2020 年 9 月 28 日星期一开始的前一周的结果。您的代码没有任何问题。
  • 您好,您的脚本不正确。根据您的脚本,我仍然得到以前错误的数据。正如你在我的头上读到的。我只想获取或选择本周的星期一到星期六。
  • 以前的数据是什么?如果您在星期一运行查询,则只能获得当天的结果。如果您在周六运行查询,您将获得上周一到周六的结果。如果您在周日运行查询,您将获得前一周的结果:从上周一到周六。这有什么问题?
  • 直截了当,我只想获取本周星期一到星期六的数据。所以这意味着从 2020 年 10 月 5 日到 2020 年 10 月 10 日。
猜你喜欢
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-29
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多