如何 select 并加入具有最大日期的字段?
How to select and join field with max date?
我在 RECID 和 AAATRANSPORTORDERRECID 上连接了两个表:
AAATRANSPORTTABLE
Pro Number Bill Date CREATEDDATETIME RECID
14521857 2019-04-10 2019-06-04 21:53:09.000 5637146183
AAALTLCHANGEREQUEST
AAAREFNUMVALUE AAALTLCHANGEVALUE RECID CREATEDDATETIME AAATRANSPORTORDERRECID
14521857 Edit Cycle 5637655326 2020-01-21 14:26:31.000 5637146183
14521857 Ready to Invoice 5637656076 2020-01-21 14:29:24.000 5637146183
14521857 Invoiced 5637656098 2020-01-21 16:04:39.000 5637146183
我需要 select 从 AAATRANSPORTTABLE 显示的记录并加入 AAALTLCHANGEREQUEST 的最新 CREATEDDATETIME 的 AAALTLCHANGEVALUE 值。我的查询如下:
SELECT
t.[Pro Number],
t.CREATEDDATETIME,
t.[Bill Date],
t.RECID,
l.AAALTLCHANGEVALUE,
max(l.CREATEDDATETIME) as Status_Date
FROM [AX2cTestStage].[dbo].[AAATRANSPORTTABLE_V] t
LEFT JOIN AX2cTestAdapter_dbo_AAALTLCHANGEREQUEST_V l
ON t.RECID = l.AAATRANSPORTORDERRECID
WHERE t.[Pro Number] = '14521857'
GROUP by l.CREATEDDATETIME,t.[Pro Number],t.CREATEDDATETIME,t.[Bill Date],t.RECID,l.AAALTLCHANGEVALUE
它产生这些结果:
Pro Number Bill Date CREATEDDATETIME RECID AAALTLCHANGEVALUE Status_Date
14521857 2019-04-10 2019-06-04 21:53:09.000 5637146183 Edit Cycle 2020-03-24 11:42:52.000
14521857 2019-04-10 2019-06-04 21:53:09.000 5637146183 Ready to Invoice 2020-03-24 11:51:00.000
14521857 2019-04-10 2019-06-04 21:53:09.000 5637146183 Invoiced 2020-03-24 11:52:08.000
我想要的输出是
Pro Number Bill Date CREATEDDATETIME RECID AAALTLCHANGEVALUE Status_Date
14521857 2019-04-10 2019-06-04 21:53:09.000 5637146183 Invoiced 2020-03-24 11:52:08.000
问题是您在 select 查询中 selecting max(l.CREATEDDATETIME) 但您没有对 select 最大日期做任何事情条款。您必须将 where 子句添加到 select 3 行中具有最大日期的行。我已尝试修改您的查询,您可能需要修改 table 和列名,但您将在完成后获得上下文 -
SELECT
t.[Pro Number],
t.CREATEDDATETIME,
t.[Bill Date],
t.RECID,
l.AAALTLCHANGEVALUE,
l.CREATEDDATETIME as Status_Date
FROM [AX2cTestStage].[dbo].[AAATRANSPORTTABLE_V] t
LEFT JOIN AX2cTestAdapter_dbo_AAALTLCHANGEREQUEST_V l
ON t.RECID = l.AAATRANSPORTORDERRECID
WHERE t.[Pro Number] = '14521857'
AND l.CREATEDDATETIME = (select max(V.CREATEDDATETIME) from AX2cTestAdapter_dbo_AAALTLCHANGEREQUEST_V V where V.AAAREFNUMVALUE = '14521857')
GROUP by l.CREATEDDATETIME,t.[Pro Number],t.CREATEDDATETIME,t.[Bill Date],t.RECID,l.AAALTLCHANGEVALUE
不可能从您的数据中获得所需的结果,因为所需数据中的给定日期甚至不存在于任何表格中。但是,根据您的定义,这应该是您所追求的:
SELECT
t.[ProNumber],
t.CREATEDDATETIME,
t.[BillDate],
t.RECID,
l.AAALTLCHANGEVALUE,
l.CREATEDDATETIME as Status_Date
FROM [AAATRANSPORTTABLE] t
LEFT JOIN (
select t1.AAATRANSPORTORDERRECID, t1.AAALTLCHANGEVALUE, t1.CREATEDDATETIME
from AAALTLCHANGEREQUEST t1
inner join (
select AAATRANSPORTORDERRECID, max(CREATEDDATETIME) as maxDate
from AAALTLCHANGEREQUEST
group by AAATRANSPORTORDERRECID) t2
on t1.AAATRANSPORTORDERRECID = t2.AAATRANSPORTORDERRECID
and t1.CREATEDDATETIME = t2.MaxDate) l
ON t.RECID = l.AAATRANSPORTORDERRECID
WHERE t.[ProNumber] = '14521857';
PS:您不需要在主 select 上进行任何分组,只需要获取每个组的最大日期。
我在 RECID 和 AAATRANSPORTORDERRECID 上连接了两个表:
AAATRANSPORTTABLE
Pro Number Bill Date CREATEDDATETIME RECID
14521857 2019-04-10 2019-06-04 21:53:09.000 5637146183
AAALTLCHANGEREQUEST
AAAREFNUMVALUE AAALTLCHANGEVALUE RECID CREATEDDATETIME AAATRANSPORTORDERRECID
14521857 Edit Cycle 5637655326 2020-01-21 14:26:31.000 5637146183
14521857 Ready to Invoice 5637656076 2020-01-21 14:29:24.000 5637146183
14521857 Invoiced 5637656098 2020-01-21 16:04:39.000 5637146183
我需要 select 从 AAATRANSPORTTABLE 显示的记录并加入 AAALTLCHANGEREQUEST 的最新 CREATEDDATETIME 的 AAALTLCHANGEVALUE 值。我的查询如下:
SELECT
t.[Pro Number],
t.CREATEDDATETIME,
t.[Bill Date],
t.RECID,
l.AAALTLCHANGEVALUE,
max(l.CREATEDDATETIME) as Status_Date
FROM [AX2cTestStage].[dbo].[AAATRANSPORTTABLE_V] t
LEFT JOIN AX2cTestAdapter_dbo_AAALTLCHANGEREQUEST_V l
ON t.RECID = l.AAATRANSPORTORDERRECID
WHERE t.[Pro Number] = '14521857'
GROUP by l.CREATEDDATETIME,t.[Pro Number],t.CREATEDDATETIME,t.[Bill Date],t.RECID,l.AAALTLCHANGEVALUE
它产生这些结果:
Pro Number Bill Date CREATEDDATETIME RECID AAALTLCHANGEVALUE Status_Date
14521857 2019-04-10 2019-06-04 21:53:09.000 5637146183 Edit Cycle 2020-03-24 11:42:52.000
14521857 2019-04-10 2019-06-04 21:53:09.000 5637146183 Ready to Invoice 2020-03-24 11:51:00.000
14521857 2019-04-10 2019-06-04 21:53:09.000 5637146183 Invoiced 2020-03-24 11:52:08.000
我想要的输出是
Pro Number Bill Date CREATEDDATETIME RECID AAALTLCHANGEVALUE Status_Date
14521857 2019-04-10 2019-06-04 21:53:09.000 5637146183 Invoiced 2020-03-24 11:52:08.000
问题是您在 select 查询中 selecting max(l.CREATEDDATETIME) 但您没有对 select 最大日期做任何事情条款。您必须将 where 子句添加到 select 3 行中具有最大日期的行。我已尝试修改您的查询,您可能需要修改 table 和列名,但您将在完成后获得上下文 -
SELECT
t.[Pro Number],
t.CREATEDDATETIME,
t.[Bill Date],
t.RECID,
l.AAALTLCHANGEVALUE,
l.CREATEDDATETIME as Status_Date
FROM [AX2cTestStage].[dbo].[AAATRANSPORTTABLE_V] t
LEFT JOIN AX2cTestAdapter_dbo_AAALTLCHANGEREQUEST_V l
ON t.RECID = l.AAATRANSPORTORDERRECID
WHERE t.[Pro Number] = '14521857'
AND l.CREATEDDATETIME = (select max(V.CREATEDDATETIME) from AX2cTestAdapter_dbo_AAALTLCHANGEREQUEST_V V where V.AAAREFNUMVALUE = '14521857')
GROUP by l.CREATEDDATETIME,t.[Pro Number],t.CREATEDDATETIME,t.[Bill Date],t.RECID,l.AAALTLCHANGEVALUE
不可能从您的数据中获得所需的结果,因为所需数据中的给定日期甚至不存在于任何表格中。但是,根据您的定义,这应该是您所追求的:
SELECT
t.[ProNumber],
t.CREATEDDATETIME,
t.[BillDate],
t.RECID,
l.AAALTLCHANGEVALUE,
l.CREATEDDATETIME as Status_Date
FROM [AAATRANSPORTTABLE] t
LEFT JOIN (
select t1.AAATRANSPORTORDERRECID, t1.AAALTLCHANGEVALUE, t1.CREATEDDATETIME
from AAALTLCHANGEREQUEST t1
inner join (
select AAATRANSPORTORDERRECID, max(CREATEDDATETIME) as maxDate
from AAALTLCHANGEREQUEST
group by AAATRANSPORTORDERRECID) t2
on t1.AAATRANSPORTORDERRECID = t2.AAATRANSPORTORDERRECID
and t1.CREATEDDATETIME = t2.MaxDate) l
ON t.RECID = l.AAATRANSPORTORDERRECID
WHERE t.[ProNumber] = '14521857';
PS:您不需要在主 select 上进行任何分组,只需要获取每个组的最大日期。