我有两张桌子。
表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;
如果每个
changeDate
的Deal_ID
和incoming
分别为stage1
和Stage_From
则此查询获取每个Stage_To
的最新LEFT JOIN
。因此,此查询返回以下结果:
Deal_ID maxChangeDate
1199 2014-12-12
现在,如果在Table1和这个结果之间创建一个
maxChangeDate
,那么Table1的每个in条目都会在Lead_ID and Deal_ID
之后产生相应的。