获取所有数据并将一列分成3个其他列

时间:2011-11-14 09:52:02

标签: mysql aggregate-functions

SELECT date( `captureTime` ) dateDay, DATE_FORMAT( `captureTime` , '%H' ) dateHour, DATE_FORMAT( `captureTime` , '%i' ) dateQuarter, max( channel1_Data ) , max( channel2_Data ) , max( channel3_Data ) , min( channel1_Data ) , min( channel2_Data ) , min( channel3_Data )
FROM `sensordata`
WHERE `Sensor_sensorSerialNo` =1
AND `captureTime` >= '2011-10-16 22:15:11'
AND `captureTime` <= '2011-10-17 23:59:59'

我想在运行select查询后获取2011-10-16 22:15:11到2011-10-17 23:59:59的所有数据。并且' captureTime '列也需要分为三列(即' dateDay ',' dateHour '和' dateQuater < /强>')。但是,在运行上述查询后,只能得到一行结果。我在那里看不出任何错误。

有人可以指出错误吗?提前谢谢!

2 个答案:

答案 0 :(得分:2)

min,max函数是聚合函数,通常与Group By子句一起使用。但是,如果不使用Group By子句,则在对完整表数据执行计算后将返回Min或Max值。因此,只应返回one row,这将是最小值或最大值。如果要选择其他列,则这些列必须存在于Group By子句中。 MySql允许执行此查询,但其他dbms(如SQLServer)甚至不允许执行此查询。

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

答案 1 :(得分:0)

尝试使用like:

SELECT date( `captureTime` ) as "dateDay", DATE_FORMAT( `captureTime` , '%H' ) as "dateHour", DATE_FORMAT( `captureTime` , '%i' ) as "dateQuarter", max( channel1_Data ) , max( channel2_Data ) , max( channel3_Data ) , min( channel1_Data ) , min( channel2_Data ) , min( channel3_Data ) FROM `sensordata` WHERE `Sensor_sensorSerialNo` =1 AND `captureTime` >= '2011-10-16 22:15:11' AND `captureTime` <= '2011-10-17 23:59:59'