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

SQL查询:为每个订单的每个ID_Phase选取最新日期记录

解决方法

你的原SQL存在几个关键问题:

  • 子查询仅按ID_Phase分组,未结合ID_Order,会导致不同订单的同一阶段最大日期被合并,无法实现每个订单的每个阶段取最新行的需求
  • 拼写错误:tt.Data应为tt.Date
  • 固定了ID_Order = 0001,若需所有订单的结果,该条件需移除

以下是两种正确的实现方式:

方法1:JOIN + 分组(兼容多数SQL数据库)

SELECT tt.*
FROM Production_Phases_History tt
INNER JOIN (
    SELECT ID_Phase, ID_Order, MAX(Date) AS MaxDateTime
    FROM Production_Phases_History
    GROUP BY ID_Phase, ID_Order  -- 必须同时按订单+阶段分组
) groupedtt 
ON tt.ID_Phase = groupedtt.ID_Phase
AND tt.ID_Order = groupedtt.ID_Order  -- 关联时需同时匹配订单ID
AND tt.Date = groupedtt.MaxDateTime
ORDER BY tt.ID_Order, tt.ID_Phase;

方法2:窗口函数(推荐,逻辑更直观)

若你的数据库支持窗口函数(如MySQL 8.0+、PostgreSQL、SQL Server等),使用ROW_NUMBER()会更清晰:

SELECT ID_Phase, ID_Order, Date
FROM (
    SELECT 
        *,
        ROW_NUMBER() OVER (
            PARTITION BY ID_Phase, ID_Order  -- 按订单+阶段划分分组
            ORDER BY Date DESC  -- 按日期倒序排列,最新行排第1位
        ) AS rn
    FROM Production_Phases_History
) t
WHERE rn = 1  -- 仅保留每个分组的第1行(最新日期记录)
ORDER BY ID_Order, ID_Phase;

如果只需查询特定订单(如0001),可在子查询或外层添加WHERE ID_Order = '0001'(注意订单ID为字符串类型时需加引号)。

内容的提问来源于stack exchange,提问作者Ares

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:52:36