Access交流中心

北京 | 上海 | 天津 | 重庆 | 广州 | 深圳 | 珠海 | 汕头 | 佛山 | 中山 | 东莞 | 南京 | 苏州 | 无锡 | 常州 | 南通 | 扬州 | 徐州 | 杭州 | 温州 | 宁波 | 台州 | 福州 | 厦门 | 泉州 | 龙岩 | 合肥 | 芜湖 | 成都 | 遂宁 | 长沙 | 株洲 | 湘潭 | 武汉 | 南昌 | 济南 | 青岛 | 烟台 | 潍坊 | 淄博 | 济宁 | 太原 | 郑州 | 石家庄 | 保定 | 唐山 | 西安 | 大连 | 沈阳 | 长春 | 昆明 | 兰州 | 哈尔滨 | 佳木斯 | 南宁 | 桂林 | 海口 | 贵阳 | 西宁 | 乌鲁木齐 | 包头 |

[5分]求全天最忙时的指标的查询算法-考验SQL的能力

hunter  发表于:2014-05-15 22:30:23  
复制

现有一个数据表,字段包含:BSC,start_time,ci,kpi002,kpi019这五个字段,该数据实际是不同的CI在全天不同的时段的指标(kpi002,kpi019)。目的很简单,就是找出每个CI在KPI019全天最大值时的相关指标,kpi019最大值相同时取start_time最大值。输出的结果包括上面的五个字段。附件是包括基础数据的ACCESS文件。下图为我想得到的结果:

点击下载此附件-最忙时.rar

 

Top
renco 发表于:2014-05-15 22:58:17

点击下载此附件


请看结果:查询3



hunter 发表于:2014-05-16 08:21:10
你的思路和我当初是一样的,先求KPI019的最大值,再根据KPI019最大值对应的时间求出时间的最大值,最后再根据时间求出其它的指标,过程还是比较绕,有人说能一步就能查出来……

renco 发表于:2014-05-16 10:00:58

例子中是分开步骤的,你可以转成子查询,就一个查询就可以了

请学习一下子查询的写法



蟹仔 发表于:2014-05-17 21:44:33
写个自定义函数,又好用又美观。

hunter 发表于:2014-05-18 22:05:02
这也能用自定义函数?不明白,能说一下思路吗?

煮江品茶 发表于:2014-05-19 13:43:44
用什么方法处理都快不了。

zhaoyoulong 发表于:2014-05-20 15:40:28

用聚合函数 

速度有点慢

查询5或查询6是你要的结果点击下载此附件



hunter 发表于:2014-05-20 21:13:33
用聚合函数的方法好复杂啊!我得消化消化……问题是实际的表里除了KPI002,还有KPI003、KPI004、KPI005……,每个字段都这样处理,那也太麻烦了!

cspa 发表于:2014-05-20 21:29:21
如果是这样的话,那真建议用自定义函数了。

zhaoyoulong 发表于:2014-05-21 09:54:59
SELECT CELLBUSY_NSN.*
FROM CELLBUSY_NSN

WHERE (((CELLBUSY_NSN.start_time)=DMax("[start_time]","CELLBUSY_NSN","[ci]=" & [ci] & " and [kpi019]=" & DMax("[kpi019]","CELLBUSY_NSN","[ci]=" & [ci]))));


见查询7

点击下载此附件



renco 发表于:2014-05-21 11:15:25

这贴怎么讨论了那么多:

就两种方式:

1.用函数:无论你用聚合函数,还是自定义函数,没区别,聚合函数也是函数,只是特别被系统标识出来了而已,只是自定义的在使用方面更有针对性,方便使用而已

2.用SQL(查询):多个子查询的嵌套,上面也说了可以组合成一句SQL语句查询

SELECT C.*
FROM (SELECT A1.ci, B.kpi019, Max(B.start_time) AS start_time_Max
FROM (SELECT A.ci, Format(A.start_time,"yyyy-mm-dd") AS Date_Times, Max(A.kpi019) AS kpi019_Max
FROM CELLBUSY_NSN AS A
GROUP BY A.ci, Format(A.start_time,"yyyy-mm-dd")) AS
A1 INNER JOIN CELLBUSY_NSN AS B ON (A1.[kpi019_Max]=B.kpi019) AND (A1.Date_Times=Format(B.start_time,"yyyy-mm-dd")) AND (A1.ci=B.ci)
GROUP BY A1.ci, B.kpi019) AS B1 INNER JOIN CELLBUSY_NSN AS C ON (B1.ci=C.ci) AND (B1.start_time_Max=C.start_time);

 



总记录:11篇  页次:1/1 9 1 :