0
votes

MySQL - Sélectionnez la valeur la plus récente avec où

J'ai une table comme ci-dessous (laissez appelé cette table sous t1) xxx pré>

Je souhaite sélectionner la ligne avec deux conditions. P>

  1. Obtenez la ligne avec la combinaison de unique AS_ID, nom de code code> li> ol>

    Donc, voici ma combinaison unique est p> xxx pré>

    1. filtré par la valeur max-horodatage, si max horodatage est identique, puis commandez par ID desc et limite par 1. Donc, je peux donc obtenir la ligne la plus récente. Li> OL>

      Sortie attendue: H3>
      +----+---------------------+---------+-----------------------+-------+-------------+
      | id | timestamp           | p_value | TS                    | as_id | codename    |
      +----+---------------------+---------+-----------------------+-------+-------------+
      | 3  | 2019-03-13 07:55:44 | 561     | 2019-03-13 07:53:17   | 1795  | ActivePower |
      +----+---------------------+---------+-----------------------+-------+-------------+
      | 5  | 2019-03-13 07:56:26 | 974     | 2019-03-13 07:33:28   | 1795  | Cumulative  |
      +----+---------------------+---------+-----------------------+-------+-------------+
      


0 commentaires

3 Réponses :


0
votes

utilise la sous-requête corrélée

  select t1.* from table_name t1
  where (t1.timestamp,id) in ( select max(timestamp),max(id) from 
                       table_name t2 where t1.as_id=t2.as_id
                       and t1.codename=t2.codename
                       )


0 commentaires

0
votes

Utilisez la sous-requête corrélée

select * from tablename a
where id in 
    (select max(id) from tablename b where a.as_id=b.as_id and a.codename=b.codename)


0 commentaires

0
votes

Vous pouvez y parvenir par Row_Number ()

SELECT  id, timestamp, p_value, TS, as_id, codename 
FROM (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY as_id, codename ORDER BY TS DESC) AS RN
    FROM Table
) AS Q
WHERE RN = 1


0 commentaires