我有两张桌子。
表1:

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

表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  |

我想为每个在表2中有记录的交易ID添加“ChangeDate”,其中阶段从“Incoming”更改为“Stage1”。在阶段从“进入”到“阶段1”多次的情况下,我想要最大的日期,例如2014年12月12日,而不是2014年12月1日。
结果表应为:
+---------+---------+------------+
| 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;

如果每个changeDateDeal_IDincoming分别为stage1Stage_From则此查询获取每个Stage_To的最新LEFT JOIN
因此,此查询返回以下结果:
Deal_ID    maxChangeDate
1199        2014-12-12

现在,如果在Table1和这个结果之间创建一个maxChangeDate,那么Table1的每个in条目都会在Lead_ID and Deal_ID之后产生相应的。

07-25 23:24