SQL:仅获取组中的最后一个元素
SQL: Get only the last Element out of Groups
获得了 SQL stmt,其中获得了 HeatingElements 及其上次测量的加热时间和时间戳。
SELECT
ts_diff,
name,
s_per_deg,
CAST(dates.gen_date AS DATE) AS gen_date
FROM
heat_data
RIGHT JOIN
dates
ON
dates.gen_date = DATE(ts)
WHERE name != ''
ORDER BY gen_date DESC
我现在的输出是:
ts_diff name s_per_deg gen_date
202 HeatingElement6HeatTime 33.667 16.08.2020
205 HeatingElement4HeatTime 34.167 16.08.2020
205 HeatingElement5HeatTime 34.167 16.08.2020
208 HeatingElement7HeatTime 34.667 16.08.2020
226 HeatingElement2HeatTime 37.667 16.08.2020
199 HeatingElement6HeatTime 33.167 09.08.2020
202 HeatingElement4HeatTime 33.667 09.08.2020
204 HeatingElement5HeatTime 34.000 09.08.2020
206 HeatingElement7HeatTime 34.333 09.08.2020
223 HeatingElement2HeatTime 37.167 09.08.2020
206 HeatingElement5HeatTime 34.333 07.08.2020
209 HeatingElement7HeatTime 34.833 07.08.2020
228 HeatingElement2HeatTime 38.000 07.08.2020
202 HeatingElement6HeatTime 33.667 07.08.2020
205 HeatingElement4HeatTime 34.167 07.08.2020
198 HeatingElement6HeatTime 33.000 02.08.2020
204 HeatingElement7HeatTime 34.000 02.08.2020
202 HeatingElement5HeatTime 33.667 02.08.2020
201 HeatingElement4HeatTime 33.500 02.08.2020
223 HeatingElement2HeatTime 37.167 02.08.2020
200 HeatingElement6HeatTime 33.333 26.07.2020
203 HeatingElement4HeatTime 33.833 26.07.2020
203 HeatingElement5HeatTime 33.833 26.07.2020
206 HeatingElement7HeatTime 34.333 26.07.2020
223 HeatingElement2HeatTime 37.167 26.07.2020
我尝试的是只获取每个元素的最后一个度量,所以我的结果应该是这样的:
ts_diff name s_per_deg gen_date
202 HeatingElement6HeatTime 33.667 16.08.2020
205 HeatingElement4HeatTime 34.167 16.08.2020
205 HeatingElement5HeatTime 34.167 16.08.2020
208 HeatingElement7HeatTime 34.667 16.08.2020
226 HeatingElement2HeatTime 37.667 16.08.2020
我尝试 ORDER BY gen_date GROUP BY name
但我总是出错。还没有找到解决方案。
我不能说 LIMIT
因为在其他数据库上我得到了其他(或多或少的元素)。
尝试使用分析函数!
SELECT ts_diff
, name
, s_per_deg
, gen_date
FROM (
SELECT ts_diff
, name
, s_per_deg
, CAST(dates.gen_date AS DATE) AS gen_date
, ROW_NUMBER() OVER (PARTITION BY name ORDER BY gen_date DESC) rn
FROM heat_data
RIGHT JOIN dates ON dates.gen_date = DATE(ts)
WHERE name != ''
) a
WHERE rn = 1
(根据以下评论更改分区)
获得了 SQL stmt,其中获得了 HeatingElements 及其上次测量的加热时间和时间戳。
SELECT
ts_diff,
name,
s_per_deg,
CAST(dates.gen_date AS DATE) AS gen_date
FROM
heat_data
RIGHT JOIN
dates
ON
dates.gen_date = DATE(ts)
WHERE name != ''
ORDER BY gen_date DESC
我现在的输出是:
ts_diff name s_per_deg gen_date
202 HeatingElement6HeatTime 33.667 16.08.2020
205 HeatingElement4HeatTime 34.167 16.08.2020
205 HeatingElement5HeatTime 34.167 16.08.2020
208 HeatingElement7HeatTime 34.667 16.08.2020
226 HeatingElement2HeatTime 37.667 16.08.2020
199 HeatingElement6HeatTime 33.167 09.08.2020
202 HeatingElement4HeatTime 33.667 09.08.2020
204 HeatingElement5HeatTime 34.000 09.08.2020
206 HeatingElement7HeatTime 34.333 09.08.2020
223 HeatingElement2HeatTime 37.167 09.08.2020
206 HeatingElement5HeatTime 34.333 07.08.2020
209 HeatingElement7HeatTime 34.833 07.08.2020
228 HeatingElement2HeatTime 38.000 07.08.2020
202 HeatingElement6HeatTime 33.667 07.08.2020
205 HeatingElement4HeatTime 34.167 07.08.2020
198 HeatingElement6HeatTime 33.000 02.08.2020
204 HeatingElement7HeatTime 34.000 02.08.2020
202 HeatingElement5HeatTime 33.667 02.08.2020
201 HeatingElement4HeatTime 33.500 02.08.2020
223 HeatingElement2HeatTime 37.167 02.08.2020
200 HeatingElement6HeatTime 33.333 26.07.2020
203 HeatingElement4HeatTime 33.833 26.07.2020
203 HeatingElement5HeatTime 33.833 26.07.2020
206 HeatingElement7HeatTime 34.333 26.07.2020
223 HeatingElement2HeatTime 37.167 26.07.2020
我尝试的是只获取每个元素的最后一个度量,所以我的结果应该是这样的:
ts_diff name s_per_deg gen_date
202 HeatingElement6HeatTime 33.667 16.08.2020
205 HeatingElement4HeatTime 34.167 16.08.2020
205 HeatingElement5HeatTime 34.167 16.08.2020
208 HeatingElement7HeatTime 34.667 16.08.2020
226 HeatingElement2HeatTime 37.667 16.08.2020
我尝试 ORDER BY gen_date GROUP BY name
但我总是出错。还没有找到解决方案。
我不能说 LIMIT
因为在其他数据库上我得到了其他(或多或少的元素)。
尝试使用分析函数!
SELECT ts_diff
, name
, s_per_deg
, gen_date
FROM (
SELECT ts_diff
, name
, s_per_deg
, CAST(dates.gen_date AS DATE) AS gen_date
, ROW_NUMBER() OVER (PARTITION BY name ORDER BY gen_date DESC) rn
FROM heat_data
RIGHT JOIN dates ON dates.gen_date = DATE(ts)
WHERE name != ''
) a
WHERE rn = 1
(根据以下评论更改分区)