Sobes.tech
Middle

Il est nécessaire d’écrire une requête qui retourne le revenu total par catégorie : |prod_cat |total_amt | |Catégorie 1|80 | |Catégorie 2|84 | |Catégorie 3|270 | Il existe une table d’abonnés avec des enregistrements arrivés à différents moments. La date de chargement de l’enregistrement est définie dans le champ raw_dt : select * from abnt |id |msisdn |tarif_plan_id|account_id|raw_dt | |1 |[phone]|4375 |4979 |[phone]| |1 |[phone]|5842 |4979 |[phone]| |2 |[phone]|5842 |589783|[phone]| |2 |[phone]|4563 |5326 |[phone]| |2 |[phone]|4563 |0832 |[phone]| |3 |[phone]|4563 |0832 |[phone]| |3 |[phone]|5495 |7485 |[phone]| |3 |[phone]|4563 |0832 |[phone]| |3 |[phone]|4563 |0832 |[phone]| Il faut écrire une requête qui retourne l’avant-dernière entrée chargée par clé id : |id |msisdn |tarif_plan_id|account_id|raw_dt | |1 |[phone]|5842 |4979 |[phone]| |2 |[phone]|4563 |0832 |[phone]| |3 |[phone]|4563 |0832 |[phone]| Il existe une table d’abonnés avec un historique de modifications. Chaque enregistrement pour un abonné est valable dans la période de valid_from_dt à valid_to_dt. Si un enregistrement est clôturé, le suivant commence à la même date. Il doit y avoir un seul enregistrement actif par abonné dans l’intervalle [valid_from_dt, valid_to_dt]. select * from abnt |id |valid_from_dt|valid_to_dt|msisdn |tarif_plan_id|account_id| |1 |[phone] |[phone] |[phone]|4375 |4979 | |2 |[phone] |[phone] |[phone]|5842 |589783| |2 |[phone] |[phone] |[phone]|4563 |5326 | |3 |[phone] |[phone] |[phone]|4563 |0832 | Il faut écrire une requête qui retourne les enregistrements avec une date de clôture incorrecte. |id |valid_from_dt|valid_to_dt|msisdn |tarif_plan_id|account_id| |2 |[phone] |[phone] |[phone]|5842 |4979 | |2 |[phone] |[phone] |[phone]|4563 |5326 | with ranked as ( select msisdn, tarif_plan_id, account_id, raw_dt, row_number() over (partition by id order by raw_dt desc) as rn ) select id, msisdn, tarif_plan_id, account_id, raw_dt from ranked where rn = 2 order by id