一对多加入聚合函数(最大)
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;
输出:
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_ID
的 incoming
和 stage1
分别为 Stage_From
和 Stage_To
,则此查询获取最新的 changeDate
。
所以这个查询returns结果如下:
Deal_ID maxChangeDate
1199 2014-12-12
现在,如果您在 Table1 和此结果之间创建 LEFT JOIN
,那么您将为 Table1 的每个条目生成结果在 Lead_ID and Deal_ID
.
之后有相应的 maxChangeDate
我有两个表。
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;
输出:
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_ID
的 incoming
和 stage1
分别为 Stage_From
和 Stage_To
,则此查询获取最新的 changeDate
。
所以这个查询returns结果如下:
Deal_ID maxChangeDate
1199 2014-12-12
现在,如果您在 Table1 和此结果之间创建 LEFT JOIN
,那么您将为 Table1 的每个条目生成结果在 Lead_ID and Deal_ID
.
maxChangeDate