56,678
社区成员
发帖
与我相关
我的任务
分享
select * from TEST.ORDER_PEDING order by CREATE_TIME DESC limit 0,6;
这个太简单了,我猜,你的是情况2,比如当前是11月份,那么实现如下
一、建表
DROP TABLE IF EXISTS TEST.ORDER_DEAL_201909;
create table TEST.ORDER_DEAL_201909(
ID VARCHAR(64) primary key not null,
ORDER_NUM VARCHAR(64),
CREATE_TIME TIMESTAMP, -- yyyy-MM-dd hh:mm:ss SSS
PAYMENT_TIME TIMESTAMP, -- yyyy-MM-dd hh:mm:ss SSS
STATUS CHAR(1) -- 0-已付款,1-待付款
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
insert into TEST.ORDER_DEAL_201909(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID0901','OU0901','2019-09-09 01:01:01','2019-09-09 01:11:11','0');
insert into TEST.ORDER_DEAL_201909(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID0902','OU0902','2019-09-09 02:02:02','2019-09-09 02:12:12','0');
insert into TEST.ORDER_DEAL_201909(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID0903','OU0903','2019-09-09 03:03:03','2019-09-09 03:13:13','0');
insert into TEST.ORDER_DEAL_201909(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID0904','OU0904','2019-09-09 04:04:04','2019-09-09 04:14:14','0');
insert into TEST.ORDER_DEAL_201909(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID0905','OU0905','2019-09-09 05:05:05','2019-09-09 05:15:15','0');
DROP TABLE IF EXISTS TEST.ORDER_DEAL_201910;
create table TEST.ORDER_DEAL_201910(
ID VARCHAR(64) primary key not null,
ORDER_NUM VARCHAR(64),
CREATE_TIME TIMESTAMP, -- yyyy-MM-dd hh:mm:ss SSS
PAYMENT_TIME TIMESTAMP, -- yyyy-MM-dd hh:mm:ss SSS
STATUS CHAR(1) -- 0-已付款,1-待付款
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
insert into TEST.ORDER_DEAL_201910(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1001','OU1001','2019-10-10 01:01:01','2019-10-10 01:11:11','0');
insert into TEST.ORDER_DEAL_201910(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1002','OU1002','2019-10-10 02:02:02','2019-10-10 02:12:12','0');
insert into TEST.ORDER_DEAL_201910(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1003','OU1003','2019-10-10 03:03:03','2019-10-10 03:13:13','0');
insert into TEST.ORDER_DEAL_201910(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1004','OU1004','2019-10-10 04:04:04','2019-10-10 04:14:14','0');
insert into TEST.ORDER_DEAL_201910(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1005','OU1005','2019-10-10 05:05:05','2019-10-10 05:15:15','0');
DROP TABLE IF EXISTS TEST.ORDER_DEAL_201911;
create table TEST.ORDER_DEAL_201911(
ID VARCHAR(64) primary key not null,
ORDER_NUM VARCHAR(64),
CREATE_TIME TIMESTAMP, -- yyyy-MM-dd hh:mm:ss SSS
PAYMENT_TIME TIMESTAMP, -- yyyy-MM-dd hh:mm:ss SSS
STATUS CHAR(1) -- 0-已付款,1-待付款
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
insert into TEST.ORDER_DEAL_201911(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1101','OU1101','2019-11-11 01:01:01','2019-11-11 01:11:11','0');
insert into TEST.ORDER_DEAL_201911(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1102','OU1102','2019-11-11 02:02:02','2019-11-11 02:12:12','0');
insert into TEST.ORDER_DEAL_201911(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1103','OU1103','2019-11-11 03:03:03','2019-11-11 03:13:13','0');
insert into TEST.ORDER_DEAL_201911(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1104','OU1104','2019-11-11 04:04:04','2019-11-11 04:14:14','0');
insert into TEST.ORDER_DEAL_201911(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1105','OU1105','2019-11-11 05:05:05','2019-11-11 05:15:15','0');
DROP TABLE IF EXISTS TEST.ORDER_PEDING;
create table TEST.ORDER_PEDING(
ID VARCHAR(64) primary key not null,
ORDER_NUM VARCHAR(64),
CREATE_TIME TIMESTAMP, -- yyyy-MM-dd hh:mm:ss SSS
PAYMENT_TIME TIMESTAMP, -- yyyy-MM-dd hh:mm:ss SSS
STATUS CHAR(1) -- 0-已付款,1-待付款
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
insert into TEST.ORDER_PEDING(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1106','OU1106','2019-11-11 11:01:01','2019-11-11 11:11:11','1');
insert into TEST.ORDER_PEDING(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1107','OU1107','2019-11-11 12:02:02','2019-11-11 12:12:12','1');
insert into TEST.ORDER_PEDING(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1108','OU1108','2019-11-11 13:03:03','2019-11-11 13:13:13','1');
insert into TEST.ORDER_PEDING(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1109','OU1109','2019-11-11 14:04:04','2019-11-11 14:14:14','1');
insert into TEST.ORDER_PEDING(ID,ORDER_NUM,CREATE_TIME,PAYMENT_TIME,STATUS) values('ID1110','OU1110','2019-11-11 15:05:05','2019-11-11 15:15:15','1');
二、实现
三张成交表是按月份来划分的,业务上肯定是不会有重复的记录,一张待处理表,存放是待处理的订单,有可能是当前月或者更前面月份的,前面分析说了,迁移数据后"待处理表"的记录会被删除,
所以"待处理表"也不会跟其他三张成交表有记录重复。此时要查询所有交易信息,就相当于查询三张成交表+一张待处理表ORDER_PEDING的所有交易信息,根据下单时间(CREATE_TIME)排序,一般是最新订单在前面(降序DESC)
SQL语句:
select allorder.* FROM
(
select * from TEST.ORDER_PEDING
UNION
select * from TEST.ORDER_DEAL_201909
UNION
select * from TEST.ORDER_DEAL_201910
UNION
select * from TEST.ORDER_DEAL_201911
) allorder
order by CREATE_TIME DESC limit 0,6; -- limit第一行从0开始去,后面表示取多少行
三、总结
关键词1:UNION 合并
这里这里你的业务能保证没有重复的记录,UNION也可以用 UNION ALL,订单数据量大的话查询效率更快,
关键词2:limit 分页
MySQL分页limit https://blog.csdn.net/JustinQin/article/details/77861867