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

如何提取同一日期下出现的不同LOGCODE数据?

嗨,刚接触MySQL碰到这种问题太正常了,我来给你捋清楚怎么解决!

首先先把你给的示例数据整理成更清晰的表格:

ORDERIDLOGCODEEXDATE
497055774622017-09-06
497055774622017-10-18
497055774622017-11-12
497055774622017-12-14
497055756912018-01-08
497055702442018-01-18
497055756912018-01-26
497055774622018-02-08
497055774622018-02-16
497055700262018-02-22
497055743442018-02-22
497055774622018-02-23
497055700262018-03-23

你的需求是:提取同一日期下存在多个不同LOGCODE的所有记录,保留对应的ORDERID、LOGCODE和EXDATE,对吧?之前用GROUP BY的时候可能因为直接把LOGCODE也纳入分组,导致没法保留所有相关记录,这里给你两种实用的解决方案:

方法一:子查询+关联(兼容所有MySQL版本)

先通过子查询筛选出那些有多个不同LOGCODE的日期,再关联原表获取对应的完整记录:

SELECT t.ORDERID, t.LOGCODE, t.EXDATE
FROM your_table t
INNER JOIN (
    -- 找出存在多个不同LOGCODE的日期
    SELECT EXDATE
    FROM your_table
    GROUP BY EXDATE
    HAVING COUNT(DISTINCT LOGCODE) > 1
) AS date_filter ON t.EXDATE = date_filter.EXDATE
ORDER BY t.EXDATE, t.LOGCODE;

运行这个语句后,你就能得到示例中2018-02-22的两条记录,其他日期因为只有单一LOGCODE会被自动过滤掉。

方法二:窗口函数(MySQL 8.0及以上版本可用)

如果你的MySQL版本是8.0或更高,用窗口函数会更简洁,不需要关联子查询:

SELECT ORDERID, LOGCODE, EXDATE
FROM (
    SELECT 
        ORDERID, LOGCODE, EXDATE,
        -- 计算每条记录所在日期的不同LOGCODE总数
        COUNT(DISTINCT LOGCODE) OVER (PARTITION BY EXDATE) AS logcode_count
    FROM your_table
) AS temp
-- 只保留总数大于1的记录
WHERE logcode_count > 1
ORDER BY EXDATE, LOGCODE;

窗口函数PARTITION BY EXDATE会按日期分组统计,给每条记录打上该日期的LOGCODE种类数标记,外层筛选标记大于1的记录即可。

两种方法都能完美满足你的需求,你可以根据自己的MySQL版本选择合适的方式~

内容的提问来源于stack exchange,提问作者D. Walsh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:52:01