SQL分组后采用LAST函数查询时字段位置的秘密

来源:互联网 发布:淘宝睡衣店铺名字 编辑:程序博客网 时间:2024/05/18 13:24
 

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

原创粉丝点击