我有两张桌子。
表1:
+---------+-------------+-------------+------------+
| 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:
+---------+---------+------------+
| Lead_ID | Deal_ID | ChangeDate |
+---------+---------+------------+
| 2323 | null | null |
| 2324 | 1199 | 12-Dec-14 |
| 2325 | null | null |
| 2326 | null | null |
| 2327 | 1080 | null |
+---------+---------+------------+
我想添加" ChangeDate"对于每个Deal_ID,其表2中的记录已从" Incoming"到" Stage1"。如果阶段从"传入"到" stage1"多次,我希望最大日期,即2014年12月12日,而不是2014年12月1日。
结果表应为:
ini_set('session.save_path',realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../session'));
session_start();
我看了几个类似的问题,建议使用" Group_Concat",但我无法通过该方法达到我想要的效果。
非常感谢任何建议。
答案 0 :(得分:1)
以下是查询:
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;
如果changeDate
和Deal_ID
分别为incoming
和stage1
,则此查询会获取每个Stage_From
的最新Stage_To
。
因此,此查询返回以下结果:
Deal_ID maxChangeDate
1199 2014-12-12
现在,如果您在 Table1 和此结果之间设置LEFT JOIN
,那么您将在 Table1 条目中的每个条目中得到相应的maxChangeDate
在Lead_ID and Deal_ID
之后。