如何在sql中的最小和最大日期

时间:2017-03-23 10:20:48

标签: mysql sql

您好我想在我的查询的最小和最大日期之间的字段中进行子结构:

SELECT Max(km) - MIN(km)
from positions
where deviceid = 2
  and cast(devicetime as date) between MIN('2017-03-23') and Max('2017-03-23'))

但它会出错。 PS,数据库中的设备时间是日期时间类型,我使用的是mysql 错误是:invalide组功能 enter image description here

5 个答案:

答案 0 :(得分:0)

您之间不需要MINMAX

SELECT Max(km) - MIN(km)
from positions
where deviceid = 2
  and cast(devicetime as date) between '2017-03-23 00:00:00' and '2017-03-23 23:59:59'

答案 1 :(得分:0)

请改为尝试:

SELECT Max(km) - MIN(km)
from positions
where deviceid = 2
and cast(devicetime as date) between '2017-03-23' and '2017-03-23'

您不能在where子句中使用聚合函数,只能在select,having或order by子句中使用。

答案 2 :(得分:0)

删除min&来自where的最大值....这是不允许的。试试下面的sql。添加了时间戳,以便您获得准确的结果。

SELECT Max(km) - MIN(km)
from positions
where deviceid = 2
  and cast(devicetime as date) between '2017-03-23 00:00:00' and '2017-03-23 23:59:59'

答案 3 :(得分:0)

在SQL Server中,您可以使用以下代码

unsigned i = START_VAL;
do
{
    // ...
} while ( i-- != 0 );

请查看汇总和非汇总函数..

谢谢..

答案 4 :(得分:0)

您的具体问题是WHERE子句中的聚合函数。但是,您还应注意,在WHERE中使用列时,使用函数或类型转换是个坏主意。这可以防止使用索引。

因此,更好的版本使用不等式:

select min(km) - max(km)
from positions
where deviceid = 2 and
      devicetime >= '2017-03-23' and
      devicetime < '2017-03-24';

如果性能问题,您需要positions(deviceid, devicetime, km)上的索引。