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
#t1
和 TableData
。 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 的所有内容都已首先删除任何错误.
我有以下 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
#t1
和 TableData
。 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 的所有内容都已首先删除任何错误.