如何从MySQL数据库按时间顺序获取无连续重复的userID值?
解决方案:去除连续重复的userID
要实现按时间从旧到新排序,同时去除连续重复的userID,核心是比较当前行与上一行的userID,只保留不同的记录。以下是不同数据库环境下的实现方式:
支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server等)
使用LAG()窗口函数获取上一行的userID,筛选出当前行与上一行userID不同的记录:
SELECT userID FROM ( SELECT userID, date_commande, -- 获取按时间排序后的上一行userID LAG(userID) OVER (ORDER BY date_commande ASC, userID ASC) AS prev_userID FROM commande ) AS sub_query -- 保留第一行(prev_userID为空)或当前userID与上一行不同的记录 WHERE prev_userID IS NULL OR userID != prev_userID ORDER BY date_commande ASC;
MySQL 5.x(不支持窗口函数)
通过自定义变量实现逐行比较:
SELECT userID FROM ( SELECT userID, -- 先把当前userID赋值给prev_user,再更新curr_user为当前行的userID @prev_user := @curr_user, @curr_user := userID FROM commande, -- 初始化变量 (SELECT @curr_user := NULL, @prev_user := NULL) AS init_vars ORDER BY date_commande ASC, userID ASC ) AS sub_query -- 筛选出与上一行不同的记录 WHERE @prev_user IS NULL OR userID != @prev_user;
效果说明
以上两种方式都会按date_commande升序排序,并且去除连续重复的userID,最终得到你期望的结果:
userID 1 2 3 2 1 2
内容的提问来源于stack exchange,提问作者ÜNKNÖWÑ
相关产品推荐
相关产品推荐

