SQL分组后采用LAST函数查询时,字段位置将影响到每个组的查询结果的排序规律。如果采用了LAST函数来获得最后一条查询结果,有效的排序是很重要的。
例子:
ACCESS 视图设计(一):
SELECT 杆塔信息.编号,监控常规数据.时间, 监控常规数据.线路名称, 监控常规数据.杆塔号, 监控常规数据.杆塔名称, (监控常规数据.SIM卡ID) AS SIM卡号, 监控常规数据.A相雷击次数, 监控常规数据.B相雷击次数, 监控常规数据.C相雷击次数
FROM 监控常规数据 INNER JOIN 杆塔信息 ON 监控常规数据.SIM卡ID=杆塔信息.SIM卡号
UNION SELECT 编号,#1999 - 01 - 01 12:01:01#, 线路名称, 杆塔号, 杆塔名称, SIM卡号, 0 AS A相雷击总数, 0 AS B相雷击总数, 0 AS C相雷击总数
FROM 杆塔信息
ORDER BY 时间;
ACCESS 视图设计(二):
SELECT 杆塔信息.编号, 监控常规数据.线路名称, 监控常规数据.杆塔号, 监控常规数据.杆塔名称, (监控常规数据.SIM卡ID) AS SIM卡号, 监控常规数据.A相雷击次数, 监控常规数据.B相雷击次数, 监控常规数据.C相雷击次数
FROM 监控常规数据 INNER JOIN 杆塔信息 ON 监控常规数据.SIM卡ID=杆塔信息.SIM卡号
UNION SELECT 编号, 线路名称, 杆塔号, 杆塔名称, SIM卡号, 0 AS A相雷击总数, 0 AS B相雷击总数, 0 AS C相雷击总数
FROM 杆塔信息
ORDER BY 时间;
通过这个视图分组查询:
strSQL = "SELECT 编号, 线路名称, 杆塔号, 杆塔名称, SIM卡号, " & _
"LAST(A相雷击次数) AS A相雷击总数," & _
"LAST(B相雷击次数) AS B相雷击总数, " & _
"LAST(C相雷击次数) AS C相雷击总数 " & _
"FROM 视图_杆塔雷击总数 " & _
"GROUP BY 编号, 线路名称, 杆塔号, 杆塔名称, SIM卡号 " & _
"ORDER BY 编号, 线路名称, 杆塔号, 杆塔名称, SIM卡号 "
总结:
1.采用CCESS 视图设计(一),【时间】字段为第二列,分组后采用LAST函数查询时【雷击总次数】将以日期为顺序。
2.采用CCESS 视图设计(二),【时间】字段为末尾列,分组后采用LAST函数查询时【雷击总次数】将以【A相雷击总数】为顺序。因为这个字段值在列顺序中靠前。
SQL查询没有指定排序时,就以字段先后顺序的字段值优先排序。
作者:段利庆 QQ:14035344