【问题标题】:How to get start and end week date using week number in mysql?如何使用 mysql 中的周数获取开始和结束周日期?
【发布时间】:2020-11-10 21:36:27
【问题描述】:

我可以很容易地得到下面的开始日期和周末。

SELECT
    COUNT(*) AS reports_in_week,
    DATE_ADD(mydate, INTERVAL(1-DAYOFWEEK(mydate)) DAY),
    DATE_ADD(mydate, INTERVAL(7-DAYOFWEEK(mydate)) DAY)
FROM mytable
where WEEK(mydate,1) = '29'
GROUP BY WEEK(mydate,1)

但问题是列日期的案例索引不起作用,如果我通过索引之间的日期范围将起作用,我尝试使用周数获​​取一周的开始日期和结束日期;

我是mysql的初学者,请帮忙。

【问题讨论】:

  • case indexing of column date是什么意思。这是否意味着您需要添加一个ORDER BY 子句才能获得您想要的reault?
  • 我需要按日期在某些列上做一些汇总,比如 sum
  • @RiggsFolly ;我可以使用索引号获取开始日期和结束日期,而不是可以通过 where 子句更改,例如 start_date 和 end_date 之间的日期;因为我只有周数
  • @Dev 我认为这个问题将从一些样本数据和一个示例中受益匪浅
  • “为什么”见en.wikipedia.org/wiki/Sargable

标签: mysql date count query-optimization date-arithmetic


【解决方案1】:

如果您想过滤给定的一周和年份,那么一个选项是使用str_to_date() 从年份和周数生成日期范围:

where 
        mydate >= str_to_date('2020-29 Monday', '%Y-%u %W')
    and mydate <  str_to_date('2020-29 Monday', '%Y-%u %W') + interval 7 day

%u 说明符代表一个星期数,星期一是一周的第一天(所以这类似于 WEEK() 在模式 1,您的查询使用)。

上述where 谓词将利用mydate 上的索引——这似乎是您的目的。

【讨论】:

  • 第二个条件应该是
  • @Dev:实际上应该是&lt;(因为是8天后)。固定。
猜你喜欢
  • 2010-11-19
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 1970-01-01
相关资源
最近更新 更多