查询当前用户的上次购买时间,求优解

寂無 2018-06-26 07:26:52
CREATE TABLE `order_info` (
`id` int(2) DEFAULT NULL,
`user_id` int(2) DEFAULT NULL,
`buy_time` date DEFAULT NULL,
`last_time` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


INSERT INTO order_info VALUES (1,11,'2013-10-16',NULL);
INSERT INTO order_info VALUES (2,11,'2013-10-17',NULL);
INSERT INTO order_info VALUES (3,11,'2013-10-18',NULL);
INSERT INTO order_info VALUES (4,11,'2013-10-19',NULL);
INSERT INTO order_info VALUES (5,22,'2013-10-22',NULL);
INSERT INTO order_info VALUES (6,22,'2013-10-25',NULL);
INSERT INTO order_info VALUES (7,22,'2013-10-28',NULL);

-- 查询当前用户的上次购买时间
select id,user_id,buy_time,(select max(buy_time) from order_info as a where a.user_id = oi.user_id and a.id<oi.id) AS last_time
from order_info as oi;



除了嵌套子查询还有其他方法吗? 几百万数据的查询
...全文
107 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
二月十六 2018-06-27
如果数据量很大的,可以冗余一个字段,在表中加上lasttime,然后初始化一下计算出所有的,然后以后每次插入数据的时候,都把lasttime找出来,填充到表字段中,空间换效率。
回复
吉普赛的歌 2018-06-27
你不是有一个 last_time 的字段么?
先把已有的数据更新;
以后每当用户购买时, 更新一下他上次的购买时间不就得了(用触发器完成都可以的)
回复
RINK_1 2018-06-26

SELECT A.user_id,A.buy_time,MAX(B.buy_time) AS last_time
FROM order_info A
JOIN order_info B ON A.user_id=B.user_id AND A.buy_time>B.buy_time
GROUP BY A.user_id,A.buy_time


效率如何,这就不好说了。
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2018-06-26 07:26
社区公告
暂无公告