【问题标题】:Query for # of new user per week - how to order by year/week?每周查询新用户数 - 如何按年/周排序?
【发布时间】:2019-11-24 15:53:50
【问题描述】:

我正在编写一个 MySQL 查询,输出按周创建的新用户数。

我的用户表是:

id | created_at

我的查询:

SELECT YEAR(created_at) AS Year, DATE_FORMAT(created_at, '%b %e') AS Week, COUNT(*) AS total
FROM users
GROUP BY Year, Week;

问题:

  • 年份:我希望最近的年份位于顶部,目前最旧的年份位于输出的顶部。
  • 周:周列未根据日历排序。例如最后一条记录显示:2019 | May 9 | 100

我想在哪里排序年份和星期。

【问题讨论】:

  • 您查看过 ORDER BY 子句吗?
  • 你不是按周分组,而是按天分组。
  • 一年内,您想要最近一周的第一个还是最后一个?
  • @Barmar 按年份,最近的第一个...谢谢
  • 我知道你想要最近的一年,但是你想要最近的一周还是一年中的第一周?

标签: mysql sql mariadb


【解决方案1】:

我想你会发现函数YEARWEEK() 很有帮助,不仅对分组有用,而且对排序也有用。

另外,您对 DATE_FORMAT() 的使用看起来不正确,因为您正在输出 %e,这是一个月中的哪一天,但您是按周分组的?

SELECT DATE_FORMAT(created_at, '%Y %b %v') AS date, COUNT(*) AS total
FROM users
GROUP BY YEARWEEK(created_at)
ORDER BY YEARWEEK(created_at) DESC;

【讨论】:

  • 谢谢,但这样会输出时髦的一周:201928、201927、201926
  • 有没有办法让这个输出更友好?
  • 你真正想要什么输出? <year> <month> <week>?您不能根据原始查询真正包含日期,因为您选择一周中的哪一天?
  • 谢谢,但是这些行没有按周分组,它们有一些奇怪的顺序:2019 年 7 月 28 日 2019 年 7 月 27 日 2019 年 6 月 26 日 2019 年 6 月 25 日 2019 年 6 月 24 日 2019 年 6 月 23 日 2019 年 6 月 22 日 2019 年 5 月 21 日2019 2019年5月20日2019年5月19日2019年5月18日2019年4月17日2019年4月16日2019年4月15日2019年4月14日2019年3月13日2019年3月12日2019年3月11日2019年3月10日2019年3月9日2019年2月8日2019年2月7日2019年2月6日2019年2月5日扬2019 年 1 月 03 日 2019 年 1 月 02 日 2019 年 1 月 1 日 2018 年 12 月 52 日 2018 年 12 月 51 日 2018 年 12 月 50 日 2018 年 12 月 49 日 2018 年 12 月 48 日 2018 年 11 月 48 日 2018 年 11 月 46 日 2018 年 11 月 46 日 2018 年 11 月 44 日 2018 年 10 月 44 日2018 年 10 月 43 日
  • 即输出<year> <month> <week of year>。所以一年中的第 27 和 28 周是在 7 月,一年中的第 23、24、25 和 26 周是在 6 月,等等......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多