MSSQL服务器SQL查询如何利用 "group by "进行查询?

问题描述 投票:0回答:1

表格数据

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.时间戳上的最新数据(Hour) 2.每个植物的单行。最新数据的时间戳(Hour) 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
sql-server-2005
1个回答
0
投票

我认为这应该是简单的

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 然后将这些信息连接到原始表中,以找到 value 对应于该植物ID和日期。

© www.soinside.com 2019 - 2024. All rights reserved.