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
我认为这应该是简单的
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和日期。