取数据库里一列的最大值

时间:2021-01-23 15:10:25
我想从message_id(int类型)取最大值,用这条语句select max(message_id) as maxid from message
出现一下错误
[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]列 'message.message_id' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。 
在网上搜索错误找到解决方法,改语句为:use message select max(message_id) as maxid from message
没有那个错误了 又出现一下错误:
[Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]未能在 sysdatabases 中找到数据库 'message' 所对应的条目。没有找到具有该名称的条目。请确保正确地输入了名称。 
我要崩溃了 高手 救救我

13 个解决方案

#1


select max(message_id) as maxid from message

--语法没有错误,假定message是表名,message_id是message表中的字段。

#2


message 是什么? 表还是视图? 

单独的一条:
select max(message_id) as maxid from message

本身是没有任何错误的.


#3


如果你的查询指向的是一个视图, 或者是包含计算列的表, 则可能这个视图本身有问题, 或者计算列的公式有问题.


你可以
select * from message 看看有没有错.

#4


message 是个表 message_id 是列值
我select *from message 没有任何错误

#5


message_id 这个名称一定写错了,好好看一下。

#6


select max(message_id) as maxid from message应该不会有问题啊

#7


select max(message_id) as maxid from message

我一向这么写,好象没有问题

顺便关注老大的回答

#8


這樣的寫法是對的,如果message是表的話,那確認一下,message_id是不是表message的字段,還是你自己打錯了?

#9


message 是这个表,message_id是表里的字段,并且是主键,正如上面说的
我select * from message 没有任何错误,但是要是用select max(message_id) as maxid from message 就有Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]列 'message.message_id' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。

#10


up

#11


这个语句应该没有问题啊,我也是一直都是这么写的。

#12


我在网上找到了解决办法 就是在后面加上group
原语句变为:select max(message_id) as maxid from message group by message_id
这样就没有错误了,但是有别的错误 我把代码写一下:
                           int currentid=1;
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
            String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mylove"; 
String user="sa"; 
String password="sa"; 
Connection conn= DriverManager.getConnection(url,user,password); 
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select max(message_id) as maxid from message group by message_id"; 
ResultSet rs=stmt.executeQuery(sql); 
rs.next(); currentid=rs.getInt("maxid")+1;
rs.close();
Integer c=new Integer(currentid);
InitialContext ctx=new InitialContext();
//ArrayList list=new ArrayList();
Object obj =ctx.lookup("messageprocess");
                            …………………………
这次没有上面的那个错误了,可是他就是总把message_id=1 向数据库里插入, 当数据库里有id=1的数据后 就报错:Entity with primary key 1 already exists 
不能达到我想要的目的,取message_id最大值,然后+1,把下一个数据插入数据库

#13


不会,我一直都是直接使用MAX没有GROUP也没有问题的

#1


select max(message_id) as maxid from message

--语法没有错误,假定message是表名,message_id是message表中的字段。

#2


message 是什么? 表还是视图? 

单独的一条:
select max(message_id) as maxid from message

本身是没有任何错误的.


#3


如果你的查询指向的是一个视图, 或者是包含计算列的表, 则可能这个视图本身有问题, 或者计算列的公式有问题.


你可以
select * from message 看看有没有错.

#4


message 是个表 message_id 是列值
我select *from message 没有任何错误

#5


message_id 这个名称一定写错了,好好看一下。

#6


select max(message_id) as maxid from message应该不会有问题啊

#7


select max(message_id) as maxid from message

我一向这么写,好象没有问题

顺便关注老大的回答

#8


這樣的寫法是對的,如果message是表的話,那確認一下,message_id是不是表message的字段,還是你自己打錯了?

#9


message 是这个表,message_id是表里的字段,并且是主键,正如上面说的
我select * from message 没有任何错误,但是要是用select max(message_id) as maxid from message 就有Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]列 'message.message_id' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。

#10


up

#11


这个语句应该没有问题啊,我也是一直都是这么写的。

#12


我在网上找到了解决办法 就是在后面加上group
原语句变为:select max(message_id) as maxid from message group by message_id
这样就没有错误了,但是有别的错误 我把代码写一下:
                           int currentid=1;
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
            String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mylove"; 
String user="sa"; 
String password="sa"; 
Connection conn= DriverManager.getConnection(url,user,password); 
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select max(message_id) as maxid from message group by message_id"; 
ResultSet rs=stmt.executeQuery(sql); 
rs.next(); currentid=rs.getInt("maxid")+1;
rs.close();
Integer c=new Integer(currentid);
InitialContext ctx=new InitialContext();
//ArrayList list=new ArrayList();
Object obj =ctx.lookup("messageprocess");
                            …………………………
这次没有上面的那个错误了,可是他就是总把message_id=1 向数据库里插入, 当数据库里有id=1的数据后 就报错:Entity with primary key 1 already exists 
不能达到我想要的目的,取message_id最大值,然后+1,把下一个数据插入数据库

#13


不会,我一直都是直接使用MAX没有GROUP也没有问题的