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

(根据以下评论更改分区)