一对多加入聚合函数(最大)

One to Many Join with Aggregate Function (Max)

我有两个表。

Table 1:

+---------+---------+
| Lead_ID | Deal_ID |
+---------+---------+
|    2323 | null    |
|    2324 | 1199    |
|    2325 | null    |
|    2326 | null    |
|    2327 | 1080    |
+---------+---------+

Table 2:

+---------+-------------+-------------+------------+
| Deal_ID | Stage_From  |  Stage_To   | ChangeDate |
+---------+-------------+-------------+------------+
|    1199 | incoming    | stage1      | 01-Dec-14  |
|    1199 | stage1      | incoming    | 05-Dec-14  |
|    1199 | incoming    | stage1      | 12-Dec-14  |
|    1080 | incoming    | unqualified | 06-Dec-14  |
|    1080 | unqualified | stage2      | 07-Dec-14  |

我想为在 Table 2 中有记录的每个 "ChangeDate" 添加 "ChangeDate",其中舞台从 "Incoming" 更改为 "Stage1" .在阶段从 "incoming" 多次更改为 "stage1" 的情况下,我想要最大日期,即示例中的 2014 年 12 月 12 日,而不是 2014 年 12 月 1 日。

结果 Table 应该是:

+---------+---------+------------+
| Lead_ID | Deal_ID | ChangeDate |
+---------+---------+------------+
|    2323 | null    | null       |
|    2324 | 1199    | 12-Dec-14  |
|    2325 | null    | null       |
|    2326 | null    | null       |
|    2327 | 1080    | null       |
+---------+---------+------------+

我查看了一些推荐使用 "Group_Concat" 的类似问题,但我无法通过该方法得到我想要的结果。

非常感谢任何建议。

查询如下:

SELECT 
T.Lead_ID,
T.Deal_ID,
DATE_FORMAT(TT.maxChangeDate,'%d-%b-%y') AS ChangeDate
FROM Table1 T
LEFT JOIN 
(

   SELECT 
     Deal_ID,
     MAX(ChangeDate) maxChangeDate
     FROM Table2
   WHERE Stage_From = 'incoming'
   AND Stage_To = 'stage1'
   GROUP BY Deal_ID ) TT
ON TT.Deal_ID = T.Deal_ID;

SQL FIDDLE DEMO

输出:

Lead_ID Deal_ID ChangeDate
2323    (null)  (null)
2324    1199    12-Dec-14
2325    (null)  (null)
2326    (null)  (null)
2327    1080    (null)

解释:

让我们看看下面的查询(在上述查询的 TT 块内)

   SELECT 
     Deal_ID,
     MAX(ChangeDate) maxChangeDate
     FROM Table2
   WHERE Stage_From = 'incoming'
   AND Stage_To = 'stage1'
   GROUP BY Deal_ID;

如果每个 Deal_IDincomingstage1 分别为 Stage_FromStage_To,则此查询获取最新的 changeDate

所以这个查询returns结果如下:

Deal_ID    maxChangeDate
1199        2014-12-12

现在,如果您在 Table1 和此结果之间创建 LEFT JOIN,那么您将为 Table1 的每个条目生成结果在 Lead_ID and Deal_ID.

之后有相应的 maxChangeDate