回 帖 发 新 帖 刷新版面

主题:求助:sql的max函数好像没有效果啊

我用sql语句查询一个access数据库,想找出日期和站号相同的记录中风速最大的那条记录,语句如下:

select  distinct 日期,站号,风向,max(风速) from initres group by 日期,站号,风向

结果如下,发现存在多条日期和站号相同的记录(例如下面的2,3条记录),按理说用了max后日期和站号相同的记录应该只有一条的啊,请高手指教啊!!



日期    站号    风向    Expr1003
2002/01/01    57947    0    0
2002/01/01    57957    0    0
2002/01/01    57957    40    2
2002/01/01    59021    290    1
2002/01/01    59023    0    0
2002/01/01    59046    0    0
2002/01/01    59058    0    0
2002/01/01    59209    0    0
2002/01/01    59211    0    0
2002/01/01    59211    340    1
2002/01/01    59218    0    0
2002/01/01    59224    0    0
2002/01/01    59242    0    0
2002/01/01    59254    0    0
2002/01/01    59254    70    1

回复列表 (共5个回复)

沙发

select  distinct 日期,站号,风向,max(风速) from initres group by 日期,站号

板凳

日期和站号相同的记录可以有多条,但日期,站号和风向都相同的记录只能有一条,看清楚你的分组条件。。。

3 楼

[quote]日期和站号相同的记录可以有多条,但日期,站号和风向都相同的记录只能有一条,看清楚你的分组条件。。。
[/quote]


谢谢楼上的两位,如果按照如下形式可以得到我要的结果:

SELECT DISTINCT 日期, 站号,max(风速) FROM initres GROUP BY 日期, 站号

但是这样缺少风向啊,若按照一楼的形式写查询语句,access会提示:

【试图执行的查询中不包含作为合计函数一部分的特定表达式‘风向’】

这样查询就无法执行,比如以第2,3条记录为例,记录3的风速(=2)应该大于记录2的风速(=0),为什么记录2没有被排除呢?

4 楼

楼主的原始语句:
 select  distinct 日期,站号,风向,max(风速) from initres group by 日期,站号,风向

应该是对的, 查出的结果不是期望的,可能原因是: 
1. 日期包含了时间信息, 使得两行看上去一样,其实内部值不一样
2. 风向是非精确类型, 如: real, float, double等类型, 这些类型不能精确比较
3. 那就是access的BUG了

5 楼

select   日期,站号,风向,风速 from initres where 
日期||站号||风向||风速  in (select 日期||站号||风向||max(风速) from initres group by 日期,站号,风向 )

我来回复

您尚未登录,请登录后再回复。点此登录或注册