【问题标题】:How to write mysql query to sort data by month starting from current month如何编写mysql查询以从当月开始按月对数据进行排序
【发布时间】:2018-01-10 14:41:27
【问题描述】:

我有一张表,其中有一列名为“created_at”。现在我想按月分组所有记录,并从当月开始按月排序。

这是我目前编写的 MySQL 查询:

SELECT count(id),MONTH(created_at) as month 
FROM `perks` 
GROUP BY created_at 
ORDER BY MONTH(created_at)

输出是:

我首先需要月份 august(8),因为它是当前月份,然后是 9,10,11,12,1,2... 等等。

有小伙伴可以帮忙解决这个问题吗?

【问题讨论】:

  • 请提供您的代码,以便我们为您提供帮助。
  • 在没有任何数据架构的情况下编写查询非常困难。一个命名列是不够的。没有表格,没有数据……没有查询。另外:当您编辑问题以包含此类详细信息(包括示例数据和预期输出)时,还应包括您尝试过的内容以及遇到的问题。
  • @JayminNoob,谢谢。这是我的 sql 查询。 SELECT count(id),MONTH(created_at) as month FROM perks GROUP BY created_at ORDER BY MONTH(created_at)
  • @DavidMakogon 目前你的生活有压力吗?过去几次你一直在评论质量较低的菜鸟问题,但你遇到的有点突然......
  • @CaiusJard,让我用一个简单的例子来解释一下。假设我有一个餐桌餐厅,并且想按月向所有访问过的客户展示(也可能是过去一年)。月份也应该从当前月份开始。

标签: php mysql sql laravel


【解决方案1】:

正如 jaymin 所说,您需要按月分组,而不是按时间分组

GROUP BY MONTH(created_at)

另外,如果现在之前有需要排除的时间,请使用 where 子句:

WHERE created_at > current_date()

如果您的数据包括明年的日期,您可能需要group by year(created_at), month(created_at) 并按此订购,除非您不在乎明年的 8 月会滚动到今年的 8 月等

如果打算将所有内容汇总在一起,并让月份从当前月份开始循环,您需要:

ORDER BY CASE WHEN MONTH(created_at) >= MONTH(current_date()) THEN 1 ELSE 2, MONTH(created_at)

【讨论】:

  • 完全正确 :) 同意
【解决方案2】:

你可以使用

GROUP BY MONTH(CURRENT_DATE())

【讨论】:

  • @CaiusJard,您的解决方案将不起作用。 GROUP BY MONTH(CURRENT_DATE()) 将仅返回当前月份的数据,其中 date > now 将返回日期大于今天的数据。我也需要旧数据。
猜你喜欢
  • 1970-01-01
  • 2016-10-21
  • 2021-12-29
  • 1970-01-01
  • 2018-06-23
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多