INNER JOIN SQL with DateTime return 多条记录

INNER JOIN SQL with DateTime return multiple record

我有以下 table:

Group    RecDate                oData
---------------------------------------
123      2022-03-20 02:00:00    F1xR
123      2022-03-21 02:30:00    F1xF
123      2022-03-22 05:00:00    F1xN
123      2022-03-15 04:00:00    F2xR

从上面的 table 中,我想从 oData 字段中获取 MAX 日期 group by 2 个字符。然后我写了一个这样的查询:

SELECT a.Group, MAX(a.RecDate) RecDate, LEFT(a.oData, 2) oDataNo
INTO #t1
FROM TableData a
GROUP BY a.Group, LEFT(a.oData, 2)

SELECT * FROM #t1

那么,结果应该是:

Group    RecDate                 oDataNo
--------------------------------------------
123      2022-03-22 05:00:00     F1
123      2022-03-15 04:00:00     F2

根据上面的结果 (#t1),我想加入 TableData 以从 oData 字段中获取 RIGHT 字符(1 位)。所以我 INNER JOIN #t1TableData。 JOIN 字段是 RecDate。但是奇怪的是结果不是我想要的

查询如:

SELECT RIGHT(a.oData,1) oDataStat, b.* 
FROM TableData a 
INNER JOIN #t1 b ON a.RecDate = b.RecDate

错误结果如:

结果应该是:

Group    RecDate                 oDataNo       oDataStat
-----------------------------------------------------------
123      2022-03-22 05:00:00     F1            N
123      2022-03-15 04:00:00     F2            R

我是不是做错了方法?

请指教。真的很感激。

谢谢。

您提供的查询returns您想要的数据。然而,在单个查询中完成它更干净,例如

WITH cte AS (
    SELECT *
        , RIGHT(a.oData,1) oDataStat
        , ROW_NUMBER() OVER (PARTITION BY LEFT(a.oData, 2) ORDER BY RecDate DESC) rn
    FROM TableData a
)
SELECT [Group], RecDate, oData, oDataStat
FROM cte
WHERE rn = 1
ORDER BY RecDate;

returns:

Group RecDate oData oDataStat
123 2022-03-15 04:00:00 F2xR R
123 2022-03-22 05:00:00 F1xN N

注意:由于未转义 [Group],您作为 posted 的查询实际上 运行 - 您应该确保 post 的所有内容都已首先删除任何错误.