按日期在线选择最大在线记录

时间:2016-02-24 22:10:59

标签: sql

max online需要帮助:

我需要按天分组SELECT id, date, MAX(online) FROM `record_online_1` GROUP BY DAY(date) http://prntscr.com/a7j2sm

我的sql选择:

max online

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

这是不正确的结果,因为date是正确的,但此顶级在线的idclass A { protected _name: string = "" set name(name: string) { this._name = name } get name() { return this._name } } class B extends A { // Removed _name declaration here set name(name: string) { super["name"] = name + "B" // <=== Using super here } get name() { return super["name"] // <=== And here } } var b = new B(); b.name = "foo"; console.log(b.name); // "fooB" 不正确。我没有想法如何解决这个问题..

UPD:使用MySQL MariaDB

1 个答案:

答案 0 :(得分:2)

执行聚合函数时,必须在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将此连接到原始“record_online_1”表,特别加入日期和最大值。您可以使用CTE,临时表,子查询等来执行此操作。

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