首页 新闻 搜索 专区 学院

SQL相同用户ID的多条记录,选取时间最近的一条记录,时间只精确到年月日

0
悬赏园豆:5 [已解决问题] 解决于 2016-01-19 20:54

表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

这个样子的呢?求大神指教!!!

可乐泥巴的主页 可乐泥巴 | 初学一级 | 园豆:186
提问于:2015-08-12 16:55
< >
分享
最佳答案
0

你的错误在于显示字段before和after,而不是time的比较没有精确到时分秒。

不信你试试这样的语句:

select t.userId,max(t.time) from t group by t.userId

 

明白了这点以后,希望你能自己写出需要的SQL,

我一般不剧透,打断你进行学习从而出现结果的进程。

收获园豆:4
爱编程的大叔 | 高人七级 |园豆:30768 | 2015-08-12 17:03

多谢你的解答,我之前也是用这种筛选方法得到的数据,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,但是结果也不尽如人意。

可乐泥巴 | 园豆:186 (初学一级) | 2015-08-17 14:43

@可乐泥巴: 多列 group by 就是这个结果了,你没认真看数据。

爱编程的大叔 | 园豆:30768 (高人七级) | 2015-08-17 15:49

@可乐泥巴: 显示其他列不能用 group by,这么说明白吗?

爱编程的大叔 | 园豆:30768 (高人七级) | 2015-08-17 15:50
其他回答(1)
0

SQL:select top 1 t.userId,t.time,t.before,t.after from t group by t.userId order by t.time desc

收获园豆:1
小坡子~ | 园豆:252 (菜鸟二级) | 2015-08-13 13:42

多谢你的解答,我用的数据库是DB2的,使用如上所用的句式,数据库是一直报错的。

支持(0) 反对(0) 可乐泥巴 | 园豆:186 (初学一级) | 2015-08-17 14:48
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册