【问题标题】:Select record online by max online ordered by date在线选择记录按日期最大在线排序
【发布时间】:2023-03-22 06:22:02
【问题描述】:

sql需要帮助:

我需要按天分组max online (http://prntscr.com/a7j2sm)

我的 sql 选择:

SELECT id, date, MAX(online) 
FROM `record_online_1` 
GROUP BY DAY(date)

结果 - http://prntscr.com/a7j3sp

这是不正确的结果,因为,max online 是正确的,但是这个顶级在线的dateid 是不正确的。我不知道如何解决这个问题..

UPD:使用 MySQL MariaDB

【问题讨论】:

  • 你确定这是使用 group by 的正确方式吗,只是我从来没有这样用过。
  • 您使用的是什么关系型数据库?我假设一个不会强迫您将 SELECT 语句中的所有内容都包含在 GROUP BY 或聚合函数中。
  • 尝试在group by 子句中也包含id

标签: sql


【解决方案1】:

当您执行聚合函数时,您必须在 SELECT 语句中包含不属于 GROUP BY 子句中聚合函数一部分的项目。例如,在 T-SQL 中,如果您不使用 GROUP BY "id",则根本无法执行上述查询。然而,一些数据库系统允许你放弃这条规则,但它还不够聪明,无法知道它应该把哪个 ID 带回给你。例如,只有在该段的所有“id”都相同时,您才应该这样做。

那你该怎么办?分两步执行此操作。第一步,找到最大值。您将丢失 ID 和 DATETIME 数据。

SELECT DAY(date) AS Date, MAX(online) AS MaxOnline
FROM `record_online_1` GROUP BY DAY(date)

以上内容将为您提供一个日期列表,其中包含每天的最大值。 INNER JOIN 将其加入原始的“record_online_1”表,具体加入日期和最大值。您可以使用 CTE、临时表、子查询等来执行此操作。

EDIT: I found an answer that is more eloquent than my own.

【讨论】:

  • 谢谢,我会努力的。
猜你喜欢
  • 1970-01-01
  • 2014-08-28
  • 2020-08-22
  • 2011-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
相关资源
最近更新 更多