SQL Select语句其中time是*:00

时间:2011-09-22 13:28:48

标签: sql where-clause where

我正在尝试根据现有表创建过滤表。根据位置(tmcs),当前表格包含24天内每小时每分钟的行数。

我想将此表过滤到另一个表中,该表基于位置(tmcs)24天内每行只有1小时

这是我认为可以做到的sql语句......

 SELECT  
 Time_Format(t.time, '%H:00') as time, ROUND(AVG(t.avg), 0) as avg, 
 tmc, Date, Date_Time FROM traffic t 
 GROUP BY time, tmc, Date

问题是我仍然有247,000行受影响......根据简单的数学,我应该只有:

地点(TMCS):14 一天中的小时数:24 跟踪天数:24 总数= 14 * 24 * 24 = 12,096

我的原始表有477,277行 当我从这个查询中创建一个新表时,我得到247,000这是没有意义的,所以我的查询一定是错的。

我使用此方法而不是where子句的原因是因为我想找到每小时的平均速度(平均)。这不是强制性的,所以我可以使用Where子句来计算时间,但我根本不知道如何根据*:00这样做 任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

修复GROUP BY所以它是标准的,而不是随机的MySQL扩展

SELECT  
 Time_Format(t.time, '%H:00') as time,
 ROUND(AVG(t.avg), 0) as avg, 
 tmc, Date, Date_Time
FROM traffic t 
GROUP BY
 Time_Format(t.time, '%H:00'), tmc, Date, Date_Time

使用SET SESSION sql_mode = 'ONLY_FULL_GROUP_BY';运行此命令以查看其他RDBMS将为您提供的错误并使MySQL正常工作