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

寂無 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;



除了嵌套子查询还有其他方法吗? 几百万数据的查询
...全文
242 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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


效率如何,这就不好说了。

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧