短信表 HistQueue中有mobile(手机号码),short_message(短信内容),send_time(发送时间)几个字段,因为手机短信限定了70个字符,所有用户发送的信息过长就会在数据库显示成几条数据。
我想查询出这样的结果,如果short_message中包含有(待续)这个字符,就合并该号码mobile,在send_time 这个时间中不相差5分钟的同个用户发送的信息,但是被合并的数据要包含 (待续) (完) 这个2类字符。该怎么实现
我想查询出这样的结果,如果short_message中包含有(待续)这个字符,就合并该号码mobile,在send_time 这个时间中不相差5分钟的同个用户发送的信息,但是被合并的数据要包含 (待续) (完) 这个2类字符。该怎么实现
比如,一个手机号码 每分钟都发一条,那么两两间隔也就一分钟,
对于前面5分钟是否该合并最好写个procedure去做:
首先对mobile进行分组,根据send_time升序排序,然后用PLSQL去一笔一笔判断
如果同一个手机号码的short_message中含有(待续),那么再判断下一笔的short_message若有(待续)
那么直接合并,若没有(待续),则根据send_time是否在第一笔的5分钟之内,在就合并
这样逐笔循环判断
wmsys_wm_concat(s.short_message)
FROM histqueue s (SELECT mobile,
t.send_time
FROM histqueue t
WHERE t.send_time > 上次发送的时候或者有一个用来判断是否需要发送的标志
GROUP BY t.mobile) x
WHERE s.mobile = x.mobile
AND (s.send_time - x.send_time) <= 5 * 60
GROUP BY s.mobile
SELECT s.mobile,
wmsys_wm_concat(s.short_message)
FROM histqueue s,
(SELECT mobile,
t.send_time
FROM histqueue t
WHERE t.send_time > 上次发送的时候或者有一个用来判断是否需要发送的标志
GROUP BY t.mobile) x
WHERE s.mobile = x.mobile
AND (s.send_time - x.send_time) <= 5 * 60
GROUP BY s.mobile这个合并出来的信息,会在多条记录中间增加',';