如何 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';

DBFiddle Demo

PS:您不需要在主 select 上进行任何分组,只需要获取每个组的最大日期。