各位 dalao ,我遇到了一个难题……
我需要查找下图这样的一个表……
首先先找到所有 before-status=10002200, end-status=10005100 的记录,然后找同一 apply-id ,向下找 ol-id 最近, before-status=10005100, end-status=10005200 的记录,输出这条记录的 operation-time as 接单时间。
然后再找有没有同一 apply-id ,向下找 ol-id 最近, before-status=10005200, end-status=10002300 的记录,如果有的话输出这条记录的 operator-remark as 退回原因。
输出成下图这样的格式……(内容都是我瞎编的,大概是这样子)
求 dalao 指点…搞了一下午也没想到该怎么写…
怕口述不清,所以导了一份表, dalao 不嫌弃的话可以下载下来看一下,谢谢各位(/´Д`)/
https://pan.baidu.com/s/1qYCg8Ja
1
lxy42 2016-08-30 17:56:31 +08:00
我真的没看懂,可能是我对数据库不够熟
|
2
TZ 2016-08-30 18:37:40 +08:00
"向下找 ol-id 最近, " 这句话什么意思
|
3
KagamineLenKai2 OP @TZ 比如说 apply_id 12345 before-status=10002200, end-status=10005100 这条数据的 ol_id 是 99988 ,在这条数据下面有 ol_id 99989 和 ol_id99999 两条数据都符合 before-status=10005100, end-status=10005200 ,那么返回 ol_id 99989 这条数据的 operation-time
|
4
binghe 2016-08-30 20:25:24 +08:00
额。误入。晕头转向的出去了。
|
5
wmttom 2016-08-30 20:37:34 +08:00
需求表述的实在是太不清楚了,如果只是要把两种拼一起 union 下吧。但是看意思好像要根据条件把同一个 apply_id 下的数据分层多个 session 来处理,这样偏复杂的业务逻辑还是把数据都读内存直接代码处理吧,一共就几兆数据,硬是用 SQL 写出来也低效难改难维护。
话说直接把公司数据库扔网上随便让别人下真的没问题吗 ``` sql (SELECT apply_id,operation_time as 接单时间, null as 退回原因 FROM operation WHERE before_status = 10005100 AND end_status = 10005200) UNION (SELECT apply_id,operation_time as 接单时间, operator_remark as 退回原因 FROM operation WHERE before_status = 10005200 AND end_status = 10002300) order by apply_id,接单时间 ``` |
6
heeryuy 2016-08-30 22:07:44 +08:00
楼主的意思是取 before-status=10002200, end-status=10005100 在同一个 apply-id 中筛选出 ol-id 最小的一条记录?
|
7
KagamineLenKai2 OP @heeryuy 对的……
|
8
lazyCoder 2016-08-31 11:19:37 +08:00
没看懂需求
|
9
77alex 2016-08-31 11:26:08 +08:00
select apply_id ,operation_time as 接单时间,operator_remark as 退回原因 from (select ol_id,apply_id,before_status,operator_remark,operation_time from `operation` where before_status in (10002200,10005200) order by apply_id,before_status) aa group by apply_id,before_status;
这样? |
10
lizon 2016-08-31 17:42:48 +08:00
试试存储过程呢
|