Mysql 组内的最小日期

Mysql 组内的最小日期,mysql,sql,Mysql,Sql,我正在尝试在一个查询中确定以下内容是否可行 我们有一个从表A和表B获取信息的查询 SELECT a.wj_job ,a.wj_sched ,a.wj_lump ,SUM(b.wj_billed) AS wj_billed ,SUM(b.wj_received) AS wj_recd ,a.wj_lbdate ,a.wj_fecom1 FROM ag_fsch a JOIN ag_fschd b ON a.wj_j

我正在尝试在一个查询中确定以下内容是否可行

我们有一个从表A和表B获取信息的查询

SELECT 
     a.wj_job
     ,a.wj_sched
     ,a.wj_lump
     ,SUM(b.wj_billed) AS wj_billed
     ,SUM(b.wj_received) AS wj_recd
     ,a.wj_lbdate
     ,a.wj_fecom1 
FROM ag_fsch a
     JOIN ag_fschd b ON a.wj_job = b.wj_jbnum AND a.wj_sched = b.wj_sched 
WHERE 
     a.wj_job LIKE "4733.%"
GROUP BY 
     a.wj_job
     ,a.wj_sched 
ORDER BY 
     a.wj_job
     ,a.wj_sched
作为上述查询的一部分,我想从表b中提取最后一个未付账单日期。同样的事情也可以通过下面的查询来实现,但只适用于原始查询中的特定结果

SELECT 
     MIN(wj_bdate) 
FROM ag_fschd
WHERE 
     wj_jbnum = 4733.00
     AND wj_sched = 6
     AND wj_billed <> 0
     AND wj_received = 0

我认为可以使用条件聚合。我不确定,因为group by中有两个键,而不仅仅是工号。但是,这可能是您想要的输出:

SELECT a.wj_job, a.wj_sched, a.wj_lump, SUM(b.wj_billed) AS wj_billed,
       SUM(b.wj_received) AS wj_recd, a.wj_lbdate, a.wj_fecom1,
       MIN(CASE WHEN b.wj_sched = 6 AND b.wj_billed <> 0 AND b.wj_received = 0
                THEN wj_bdate
           END)
FROM ag_fsch a JOIN
     ag_fschd b
     ON a.wj_jbnum = b.wj_jbnum AND a.wj_sched = b.wj_sched 
WHERE a.wj_jbnum LIKE '4733.%'
GROUP BY a.wj_jbnum, a.wj_sched 
ORDER BY a.wj_jbnum, a.wj_sched;

使用子查询获取每个查询的最小日期:-

SELECT a.wj_job, 
        a.wj_sched, 
        a.wj_lump, 
        SUM(b.wj_billed) AS wj_billed,
        SUM(b.wj_received) AS wj_recd, 
        a.wj_lbdate, 
        a.wj_fecom1 ,
        sub0.wj_bdate
FROM ag_fsch a
JOIN ag_fschd b ON a.wj_jbnum = b.wj_jbnum AND a.wj_sched = b.wj_sched 
LEFT OUTER JOIN
(
    SELECT wj_jbnum,
            wj_sched,
            MIN(wj_bdate) 
    FROM ag_fschd
    WHERE wj_billed <> 0
    AND wj_received = 0
    GROUP BY wj_jbnum,
            wj_sched
) sub0
ON sub0.wj_jbnum = a.wj_jbnum AND sub0.wj_sched = a.wj_sched
WHERE a.wj_jbnum LIKE "4733.%"
GROUP BY a.wj_jbnum, a.wj_sched 
ORDER BY a.wj_jbnum, a.wj_sched

注意,正如Jarlh在评论中指出的,GROUPBY子句有点奇怪,因为它没有所有的非聚合字段。我没有试图在这里解决这个问题。

第二个查询min将只提供1条记录。是否要为第一个查询的所有行显示相同的记录?常规GROUP BY规则说明:如果指定GROUP BY子句,则SELECT列表中的每个列引用必须标识分组列或是集合函数的参数。较新的MySQL版本遵循这一规则,较旧的版本则不然;您的查询看起来不正确。表的唯一键是什么?表A在wj_job和wj_sched上有一个唯一的索引。表B有一个关于wj_作业、wj_计划、wj_bdate和wj_crno的唯一索引。不幸的是,这些是我们需要报告的第三方表on@Utsav我们希望为工作的每个日程安排返回不同的思维方式。在本例中,作业有来自表A 7的7个结果。每个计划可以在表B中有多个具有唯一日期的条目。从案例中删除B.wj_计划的一部分似乎会产生我们正在寻找的结果。