Office中国论坛/Access中国论坛

标题: 查询问题 取得第二数 [打印本页]

作者: cjls2000    时间: 2006-7-27 17:01
标题: 查询问题 取得第二数
查询中 最大/最小 用MAX  MIN取的  第二最大 第二最小 如何取得??[em06]
作者: cjls2000    时间: 2006-7-28 16:41
查询中不能实现吗?   1-10的话   第二最大是9   第二最小是2

[em06]
作者: hi-wzj    时间: 2006-7-28 17:29
先作查询,选出最大值或最小值的记录。

再作查询,以原表和前一查询作不匹配查询,同时取最大或最小值。
作者: sgrshh29    时间: 2006-7-28 17:30
SELECT top 1 成绩 AS 第二名 FROM [SELECT top 2 成绩 from 表 ORDER BY 成绩 DESC]. AS a ORDER BY 成绩 ;

作者: andymark    时间: 2006-7-28 18:30
以下是引用sgrshh29在2006-7-28 9:30:00的发言:


SELECT top 1 成绩 AS 第二名 FROM [SELECT top 2 成绩 from 表 ORDER BY 成绩 DESC]. AS a ORDER BY 成绩 ;



      [em01]

     最小第二 排序倒过来就可以了
作者: andymark    时间: 2006-7-28 18:51
也可以用NOT IN 的方式求得

SELECT TOP 1 产品.产品名称, 产品.单价
FROM 产品
WHERE 产品.产品名称 not in (SELECT TOP 1 产品.产品名称
FROM 产品
ORDER BY 产品.单价 DESC)
ORDER BY 产品.单价 DESC;
作者: cjls2000    时间: 2006-7-28 21:27
能帮我写一下吗?  不太明白啊  谢谢了[em01][em06][em06][attach]19325[/attach]


[此贴子已经被作者于2006-7-28 13:27:14编辑过]


作者: cjls2000    时间: 2006-7-28 23:57
请帮我写一下  谢谢啊[em17][em17][em17][em17]
作者: sgrshh29    时间: 2006-7-29 00:31
这个事情不好办,如果只有二条记录,最大的算不算第二小的?最小的算不算第二大的?如果只有一条记录,又怎么算呢?

[此贴子已经被作者于2006-7-28 16:31:35编辑过]


作者: andymark    时间: 2006-7-29 01:11
是不是一定要把最大最小第二大第二小都写在一个查询,能不能分开写
作者: andymark    时间: 2006-7-29 04:07
在一个查询反映最大,最小,大二,小二[attach]19342[/attach]

作者: cjls2000    时间: 2006-7-29 16:20
andymark  

只有一条的时候   MAX=MIN   SMAX=SMIN=NULL

只有两条的时候  MAX ,MIN    SMAX=SMIN=NULL

这样比较符合现实 [em04]不知道能不能办到呢?
作者: 青青    时间: 2006-7-29 17:11
值为:5,5,4  时二大是5还是4?
作者: sgrshh29    时间: 2006-7-29 18:00
还好楼主只要前二后二,如要前五后五,甚至前十后十,这查询还不把人绕死.建议楼主用ado逐条分析记录,符合条件的追加到临时表.[em06][em06][em06]
作者: wuaza    时间: 2006-7-29 18:16
先生成一个名次查询,然后就好办了。
select *,(select count(*)+1 from tablename where 成绩>a.成绩) as 名次

比楼下抢先一步,呵呵。

[此贴子已经被作者于2006-7-29 10:20:14编辑过]


作者: cjls2000    时间: 2006-7-29 18:17
实际情况 不会有重复值的出现[em01]
作者: sgrshh29    时间: 2006-7-29 18:37
以下是引用wuaza在2006-7-29 10:16:00的发言:


先生成一个名次查询,然后就好办了。
select *,(select count(*)+1 from tablename where 成绩>a.成绩) as 名次

比楼下抢先一步,呵呵。

难点在于有些记录只有1条,只有2条,有些3条.如果都是4条以上就好办多了.wuaza大侠有何见解?
作者: wuaza    时间: 2006-7-29 18:45
只有一条记录12的话

第一大是12
第二大是null
第一小是12
第二小是null

也只能这样了,好像。
作者: andymark    时间: 2006-7-29 19:17
用临时表的方式比较容易现实
作者: cjls2000    时间: 2006-7-29 19:33
实际的情况 是  一定是成对出现的   不是2条 就是4条 或者6条 只要能帮我实现 如果2条时候  第二MAX MIN为NULL  谢谢啊   不过区分 不仅仅是ID 还有一个日期  不日期ID可以重复[em04][attach]19353[/attach]


[此贴子已经被作者于2006-7-29 12:16:14编辑过]


作者: andymark    时间: 2006-7-29 20:34


基本上解决只有二条数据NULL值的问题,测试一下看数据结果正不正确

[attach]19354[/attach]

作者: cjls2000    时间: 2006-7-29 23:01
问题在于 多了一个日期 怎么写?[em06]
作者: andymark    时间: 2006-7-29 23:10
你整理一下例子,多一些数据,我再测试一下
作者: cjls2000    时间: 2006-7-30 00:25
我已经上传了例子  麻烦再帮我 写一下 谢谢 [em02][attach]19358[/attach]
[em27][em17]
作者: andymark    时间: 2006-7-30 04:28
     如果每天的数据都有4条,执行查询1就可以, 现在要分几步走  [attach]19360[/attach]

作者: cjls2000    时间: 2006-7-30 18:00
我修改一下工号的类型  文本---数字  就无法运行了

[em06]

还有实际情况是  绝大部分都是 2个时间   极少出现4个时间[em06]

[此贴子已经被作者于2006-7-30 10:02:00编辑过]


作者: andymark    时间: 2006-7-30 18:05
之前不是叫你整理好例子,你现在用的把数据删除了传上来不行吗?

上面的例子数据量大可能有点慢,用ADO追加到临时表更容易实现








欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3