【发布时间】:2014-08-19 05:14:15
【问题描述】:
此查询运行良好,但我想在此查询中使用MIN 函数,因为我只想要一个与给定当前位置距离最短的站点。
如何在此查询中使用MIN?
select *
from
(
SELECT fc_station_mst.station_name,fc_station_mst.station_id,fc_station_mst.lat, fc_station_mst.longitude,fc_station_mst.state,
fc_station_param_dtl.fc_date,fc_station_param_dtl.param_value,fc_parameter_mst.param_name,fc_parameter_mst.param_unit,
6371*(2*atan2 (sqrt(sin(((3.14*(fc_station_mst.lat-23.07))/180)/2) *
sin(((3.14*(fc_station_mst.lat-23.07))/180)/2)+cos((3.14*fc_station_mst.lat)/180)*cos((3.14*23.07)/180)
* sin(((3.14*(fc_station_mst.longitude-72.71))/180)/2)*
sin(((3.14*(fc_station_mst.longitude-72.71))/180)/2)),(sqrt(1-(sin(((3.14*(fc_station_mst.lat-23.07))/180)/2)
*sin(((3.14*(fc_station_mst.lat-23.07))/180)/2) +cos((3.14*fc_station_mst.lat)/180)* cos((3.14*23.07)/180)*
sin(((3.14*(fc_station_mst.longitude-72.71))/180)/2)* sin(((3.14*(fc_station_mst.longitude-72.71))/180)/2)))))) as distance
FROM fc_station_mst, fc_station_param_dtl, fc_parameter_mst
where fc_station_param_dtl.param_id=fc_parameter_mst.param_id and
fc_station_mst.station_id=fc_station_param_dtl.station_id and fc_station_param_dtl.param_id in(1,3,5,9) and
fc_station_param_dtl.hourly_forecast='24' and fc_station_param_dtl.fc_date='22-JUL-2014'
) x
where distance <= 15 ;
【问题讨论】:
-
GROUP BY子句在哪里? -
如果没有 GROUP BY 子句,则将 HAVING 子句作为单个组应用于整个结果
-
好的,但是我看,你在
HAVING中使用了distance字段,但是这里不能用,因为它是min函数的别名,你必须要么添加顶级select并使用where子句,要么在having子句中使用带有 sin、sqrt 等的整个min函数。 -
select * from ( SELECT fc_station_mst.station_name,fc_station_mst.station_id,fc_station_mst.lat, fc_station_mst.longitude,fc_station_mst.state, fc_station_param_dtl.fc_date,fc_station_param_dtl.param_value,fc_parameter_mst.param_name,fc *(2*atan2 (sqrt(sin(((3.14*(fc_station_mst.lat-23.07))/180)/2) * sin(((3.14*(fc_station_mst.lat-23.07))/180)/2)+ cos((3.14*fc_station_mst.lat)/180)*cos((3.14*23.07)/180)
-
* sin(((3.14*(fc_station_mst.longitude-72.71))/180)/2)* sin(((3.14*(fc_station_mst.longitude-72.71))/180)/2) ),(sqrt(1-(sin(((3.14*(fc_station_mst.lat-23.07))/180)/2) sin(((3.14*(fc_station_mst.lat-23.07))/180)/2 ) +cos((3.14*fc_station_mst.lat)/180) cos((3.14*23.07)/180)* sin(((3.14*(fc_station_mst.longitude-72.71))/180)/2)* sin(((3.14*(fc_station_mst.longitude-72.71))/180)/2)))))) 作为距离 fc_station_mst, fc_station_param_dtl, fc_parameter_mst