表t如下
userId time before after
1 2015/6/12 12:20:08.000000 A
1 2015/6/13 17:50:56.000000 A B
1 2015/6/13 17:51:06.000000 B C
2 [NULL] [NULL] [NULL]
3 [NULL] [NULL] [NULL]
4 [NULL] [NULL] [NULL]
5 [NULL] [NULL] [NULL]
6 2015/7/7 10:30:19.000000 W
我想把表t中相同userId的记录,如果有多条记录,就选时间最近的一条,如果有一条就选这一条,
SQL:select t.userId,max(t.time),t.before,t.after from t group by t.userId,t.before,t.after
结果是
userId time before after
1 2015/6/13 17:50:56.000000 A B
1 2015/6/13 17:51:06.000000 B C
2 [NULL] [NULL] [NULL]
3 [NULL] [NULL] [NULL]
4 [NULL] [NULL] [NULL]
5 [NULL] [NULL] [NULL]
6 2015/7/7 10:30:19.000000 W
就是时间的max函数只比较了年月日,没有精确到时分秒,如何得到结果是
userId time before after
1 2015/6/13 17:51:06.000000 B C
2 [NULL] [NULL] [NULL]
3 [NULL] [NULL] [NULL]
4 [NULL] [NULL] [NULL]
5 [NULL] [NULL] [NULL]
6 2015/7/7 10:30:19.000000 W
这个样子的呢?求大神指教!!!
你的错误在于显示字段before和after,而不是time的比较没有精确到时分秒。
不信你试试这样的语句:
select t.userId,max(t.time) from t group by t.userId
明白了这点以后,希望你能自己写出需要的SQL,
我一般不剧透,打断你进行学习从而出现结果的进程。
多谢你的解答,我之前也是用这种筛选方法得到的数据,W3SCHOOL里讲的,可以对一列group by
“select t.userId,max(t.time) from t group by t.userId”
也可以对多个列group by,
“select t.userId,max(t.time),t.before,t.after from t group by t.userId,t.before,t.after”
对一列group by,其他数据不能同时导出来,所以我选用了对多个列group by,但是结果也不尽如人意。
@可乐泥巴: 多列 group by 就是这个结果了,你没认真看数据。
@可乐泥巴: 显示其他列不能用 group by,这么说明白吗?
SQL:select top 1 t.userId,t.time,t.before,t.after from t group by t.userId order by t.time desc
多谢你的解答,我用的数据库是DB2的,使用如上所用的句式,数据库是一直报错的。