Είναι απαραίτητο να γράψετε ένα ερώτημα που να επιστρέφει το συνολικό εισόδημα ανά κατηγορία:
|prod_cat |total_amt |
|Κατηγορία 1|80 |
|Κατηγορία 2|84 |
|Κατηγορία 3|270 |
Υπάρχει ένας πίνακας συνδρομητών με εγγραφές που έφτασαν σε διαφορετικές στιγμές.
Η ημερομηνία φόρτωσης της εγγραφής ορίζεται στο πεδίο 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]|
Απαιτείται να γράψετε ένα ερώτημα που να επιστρέφει την προτελευταία φορτωμένη εγγραφή ανά κλειδί 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]|
Υπάρχει ένας πίνακας με ιστορικό αλλαγών των συνδρομητών. Κάθε εγγραφή είναι έγκυρη από valid_from_dt έως valid_to_dt.
Αν μια εγγραφή κλείσει, η επόμενη ξεκινά την ίδια ημέρα.
Για κάθε συνδρομητή, πρέπει να υπάρχει μόνο μία ενεργή εγγραφή εντός του διαστήματος [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 |
Απαιτείται να γράψετε ένα ερώτημα που να επιστρέφει τις εγγραφές με λανθασμένη ημερομηνία κλεισίματος:
|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 |
με 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