Maison  >  Questions et réponses  >  le corps du texte

Comparez les valeurs dans les tables en double

J'ai une requête qui génère une table d'enregistrements en double à partir d'un ensemble de données plus vaste et j'aimerais pouvoir effectuer une analyse plus approfondie sur ces données de sortie.

Voici un exemple de ce que vous pouvez utiliser.

J'aimerais pouvoir identifier, pour chaque propriété, les cas où la note la plus ancienne de la propriété était inférieure à 50 mais la dernière note est désormais supérieure à 70.

Dans l'exemple ci-dessous, seules les notes liées à l'attribut 17 remplissent cette condition, donc la ligne contenant la référence jygh sera extraite.

Référence Adresse d'attribut Date Note
Adev Attribut 12 2022-12-08 70
Boue Attribut 12 2022-12-16 90
mhef Attribut 17 2023-01-02 25
jygh Attribut 17 2023-01-09 70
garçon Attribut 22 2022-10-05 85
qepl Attribut 22 2022-10-25 28

Il s'agit d'une analyse spécialisée du changement au fil du temps, donc une simple comparaison max/min des notes ne suffit pas.

EDIT : j'ai modifié l'exemple de données pour montrer la baisse des valeurs de note, qui ne répond pas aux critères.

P粉811329034P粉811329034401 Il y a quelques jours584

répondre à tous(2)je répondrai

  • P粉141925181

    P粉1419251812023-09-14 07:27:06

    Cette méthode ne fonctionne que si la date n'est pas prise en compte :

    select PROPERTYADDRESS
    from TABLE1
    where RATING <= 50
    and PROPERTYADDRESS in (
     select PROPERTYADDRESS
     from TABLE1
     where RATING >= 70
    );

    Découvrez-le ici : https://dbfiddle.uk/6yoRNP74

    répondre
    0
  • P粉068510991

    P粉0685109912023-09-14 00:56:13

    Cela prendra en compte les tarifs les plus anciens et les plus récents :

    SELECT mt.PROPERTYADDRESS    
    FROM TABLE1 mt 
    INNER JOIN
        (
            SELECT PROPERTYADDRESS, MIN(Date) AS MinDate
            FROM TABLE1
            GROUP BY PROPERTYADDRESS
        ) t ON mt.PROPERTYADDRESS = t.PROPERTYADDRESS AND mt.DATE = t.MinDate
     WHERE RATING <= 50
     AND mt.PROPERTYADDRESS in (
         SELECT mt.PROPERTYADDRESS 
         FROM TABLE1 mt 
         INNER JOIN
            (
                SELECT PROPERTYADDRESS, MAX(Date) AS MaxDate
                FROM TABLE1
                GROUP BY PROPERTYADDRESS
            ) t ON mt.PROPERTYADDRESS = t.PROPERTYADDRESS AND mt.DATE = t.MaxDate
         WHERE RATING >= 70
    );

    Vérifiez-le ici : https://dbfiddle.uk/XzEIlvKc

    répondre
    0
  • Annulerrépondre