2016-02-24 25 views
1

需要帮助sql由最大的在线选择记录日期在网上订购

我需要每一天的max online组由天 (http://prntscr.com/a7j2sm

我的SQL SELECT:

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

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

这是不正确的结果,因为,max online是正确的,但此顶端在线的dateid不正确。我没有想法如何解决这个问题..

UPD:使用MySQL MariaDB的

+0

你确定是通过使用组正确的方式,它只是我从来没有使用过这种方式。 –

+1

您使用的是什么RDBMS?我假设一个不会强迫你在SELECT语句中包含GROUP BY或聚合函数中的所有内容。 – Langosta

+0

尝试在'group by'子句中包含'id'。 – Harsh

回答

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.

+1

感谢追捕我的草率的错误! – Stidgeon

+0

谢谢,我会尽力去做。 – DarkNation