You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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Ñ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 07:07:14