您好我想在我的查询的最小和最大日期之间的字段中进行子结构:
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'))
答案 0 :(得分:0)
您之间不需要MIN
和MAX
:
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)
上的索引。