【问题标题】:SQL: Order by date, only month and year given - Full Group onSQL:按日期排序,仅给出月份和年份 - 完整组
【发布时间】:2018-08-03 01:31:01
【问题描述】:

我有一个设置为全组模式的 SQL 数据库。我的目标是获取每个月的行数(ID)。这就是为什么我说Group By Datum。由于全组模式,我不能简单地说Order By created_at。因为我只选择了%m.%Y。所以我只能使用Datum,这与我的月份和年份一致。

我已经尝试连接这些值,例如 CONCAT('DATE_FORMAT(created_at, '%Y-%m'), "-01 00:00:00"),但这也不起作用...即使我将其转换为 UNIX 时间戳,它也不起作用:UNIX_TIMESTAMP(CONCAT('DATE_FORMAT(created_at, '%Y-%m'), "-01 00:00:00"))

我什至试过这个: Order By Year(DATE_FORMAT(created_at, '%Y')), Month DATE_FORMAT(created_at, '%m') 但它也不起作用......

如何在不更改 Select 值的情况下按月和年对结果进行排序? 到目前为止,这是我实际的 SQL 查询。也不工作..我几乎试图找到一个解决方案,因为 1 小时......

SELECT COUNT(ID) AS Anzahl, DATE_FORMAT(created_at, '%m.%Y') AS Datum FROM leads WHERE created_at >= '2015-01-01' AND created_at <= '2018-01-01' AND shopID = 4184 GROUP BY Datum ORDER BY UNIX_TIMESTAMP(STR_TO_DATE(Datum, '%Y-%m-01 00:00:00'))

我将不胜感激任何形式的帮助!不,我无法更改 Select 值或关闭 full_group_mode。

【问题讨论】:

  • 您在尝试后看到了哪些错误消息?
  • 没有错误信息。它只是没有按月和年排序...我猜是因为“连接”错误...但是 created_ad 包含有效日期! (时间戳)

标签: mysql sql date group-by sql-order-by


【解决方案1】:

以下将按年和月升序排序:

order by substring(datum,4,4), substring(datum,1,2)

sqlfiddle:http://sqlfiddle.com/#!9/16fab4/3

【讨论】:

  • 参见 sqlfiddle。使用 substring 函数将 datsum (mm.yyyy) 分成两部分:yyyy 和 mm,
  • 是的,但为什么不是substring(datum, 4, 7), substring(datum, 1, 2)?您将年份分解为一年的第一个字符。 2017 年将是 2
  • 子字符串函数的语法:SUBSTRING(string, start, length)。看看这个网址:w3schools.com/sql/func_mysql_substring.asp
  • 我已经做到了。但是让我们举个例子。 datum 是 02.2017。所以 char 1 是 0,char 1 是 2,char 3 是 , char 4 是 2。如果您说substring(datum,4,4),您将获得年度最佳2。我错了吗?
  • substring(datum,4,4)中的第二个4是指子串的长度。从数据的第 4 个字符开始,共 4 个字符:2017
【解决方案2】:

ORDER BY DATE_FORMAT(created_at, '%Y'), date_format(created_at, '%M') desc

这将按年份升序然后按月份降序对结果进行排序。

看看这个SQL Fiddle,看看使用MySql 5.6的查询

【讨论】:

  • 谢谢,但很遗憾因为sql_full_group_by_mode 而无法正常工作。我没有在Select 中选择created_at。如果我用Datum 替换created_at,它不会抛出任何错误消息,但它没有排序......
  • ...在您的小提琴中,年月可能会颠倒。
猜你喜欢
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-11
相关资源
最近更新 更多