MSSQL 服务器SQL 查询如何使用"group by"

MSSQL server SQL query how to utilize "group by"

Table Data

My_table_data.

testdate                plant value
2020-05-14 02:00:00.000 1   68
2020-05-14 01:00:00.000 3   115
2020-05-14 02:00:00.000 2   107
2020-05-14 03:00:00.000 2   102
2020-05-14 05:00:00.000 2   104
2020-05-14 06:00:00.000 2   111
2020-05-14 08:00:00.000 1   74
2020-05-14 08:00:00.000 2   114
2020-05-14 09:00:00.000 1   70
2020-05-14 09:00:00.000 2   114
2020-05-14 03:00:00.000 3   106
2020-05-14 03:00:00.000 3   102
2020-05-15 02:00:00.000 2   108
2020-05-14 05:00:00.000 1   74
2020-05-14 04:00:00.000 3   96
2020-05-14 04:00:00.000 3   97
2020-05-14 06:00:00.000 1   80
2020-05-14 03:00:00.000 1   77
2020-05-14 06:00:00.000 3   102

我是复杂 SQL 查询短语的新手。如何实现如下结果。 条件 1.时间戳最新数据(小时) 2. 每株单行。

WITH data AS(
SELECT testdate, plant, value, (DATEPART(HOUR,testdate))AS dH FROM My_table_data
WHERE testdate >= (SELECT CONVERT(DATETIME, CONVERT(DATE, GETDATE()), 120))
)
SELECT data.testdate, data.plant, data.value from data
WHERE data.dH= (SELECT MAX(data.dH) FROM data)
GROUP BY data.plant
ORDER BY data.plant DESC;

报错!!

testdate                   Plant      value
2020-05-14 09:00:00.000       1        70
2020-05-14 09:00:00.000       2        114
2020-05-14 06:00:00.000       3        102

我觉得这应该很简单

with maxData
AS
(
  SELECT MAX(testDate) as testDate, plantId
  FROM My_table_data
  GROUP BY plantId
)
select  
  t.testDate,
  t.plantId,
  t.value
from My_table_data t
INNER JOIN maxData m
  on t.testDate = m.testDate
  and t.plantId = m.plantId
order by plantId

这样做是使用 CTE 查找每个 plantId 的最大日期,然后将该信息加入原始 table 以查找与该 plantId 对应的 value和日期。