MySQL查询异常:无法正确获取所有工单的最早事件日期
解决MySQL视图仅返回单条工单最早事件日期的问题
看起来你是想给每个工单单独提取最早的事件日期,但新视图只返回一条记录,这大概率是因为你在创建新视图时没做按工单号分组的操作,导致MySQL计算的是全局范围内的最小日期,而不是每个工单各自的最小值。
先分析可能的错误操作
我猜你创建新视图的语句大概是类似这样的:
CREATE VIEW wrong_earliest_dates AS SELECT MIN(eventdate) AS earliest_eventdate FROM tixdate;
这种写法没有指定分组,MIN()函数会把整个tixdate视图里的所有eventdate放在一起找最小值,自然只会返回一条记录,而且如果全局最小日期不是你预期的2018-02-25,那结果肯定不对。
正确的视图创建方式
要获取每个工单的最早事件日期,核心是按工单号(比如ticket_id,你可以换成实际的字段名)分组,然后对每组的eventdate取最小值。
假设你的tixdate视图包含工单号字段(比如ticket_id)和eventdate字段,正确的语句应该是:
CREATE VIEW earliest_ticket_events AS SELECT ticket_id, MIN(eventdate) AS earliest_eventdate FROM tixdate GROUP BY ticket_id;
额外的排查建议
- 先确认
tixdate视图的结构:运行DESCRIBE tixdate;或者SELECT * FROM tixdate LIMIT 10;,看看它是否包含所有工单的记录,有没有意外过滤掉你关注的那个工单(就是预期最早日期是2018-02-25的那个)。 - 验证目标工单的日期:单独查询该工单的所有事件日期,比如
SELECT eventdate FROM tixdate WHERE ticket_id = '你的工单ID';,确认2018-02-25确实是这个工单里最小的日期。 - 如果你不需要依赖
tixdate视图,也可以直接从原ticket表查询,效率可能更高:
CREATE VIEW earliest_ticket_events AS SELECT ticket_id, MIN(eventdate) AS earliest_eventdate FROM ticket GROUP BY ticket_id;
内容的提问来源于stack exchange,提问作者cherrie
相关产品推荐
相关产品推荐

