【发布时间】:2021-11-02 12:45:17
【问题描述】:
我有一个像这样的Parameters Log 表:
| Log ID | Temperature | Humidity | country | Date |
|---|---|---|---|---|
| 1 | 40 | 10 | USA | 2021-09-04 10:00:51.737 |
| 2 | 20 | 20 | USA | 2021-09-04 11:09:51.737 |
| 3 | 30 | 30 | USA | 2021-09-04 12:09:51.737 |
上表存储了不同国家在不同时间的温度、湿度等不同参数。我想要特定日期的此参数、最大值、最小值、上次添加值和上次添加时间的平均值。
例如:
| Parameters | Country | Average | Min | Max | Last value | Last updated time |
|---|---|---|---|---|---|---|
| Temperature | USA | 30 | 20 | 40 | 30 | 2021-09-04 12:09:51.737 |
| Humidity | USA | 20 | 10 | 30 | 30 | 2021-09-04 12:09:51.737 |
这就是我为Temperature 所做的:
;WITH CTE AS
(
SELECT
AVG(Temperature) AVG_Temp,
MIN(Temperature) MIN_Temp,
MAX(Temperature) Max_Temp,
Country
FROM
Parameters_Log
GROUP BY
Country
WHERE
Country = 'USA'
AND CAST([date] AS date) = '2021-09-04'
)
首先,我得到上述国家/地区的平均温度、最低温度和最高温度
SELECT TOP 1
c.Country,
c.AVG_Temp,
c.MIN_Temp,
c.Max_Temp,
[log].date,
[log].Temperature
FROM
Parameters_Log [log]
INNER JOIN
cte c ON c.country = [log].country
AND
WHERE
[log].Country = 'USA'
AND cast([log].[date] AS date) = '2021-09-04'
ORDER BY
[log].[date] DESC
然后我使用 order by date desc 来获取最后添加的温度值和时间。最后,我将获得前 1 名并存储在一个临时表中,然后按照相同的过程处理湿度。
谁能指导我在性能方面最好的方法是什么?
【问题讨论】:
标签: sql sql-server tsql