ISO_WEEK
Fivi Panopoulou - Sotiris Karras
Σε αυτό το post θα ασχοληθούμε με την αρίθμηση των ημερολογιακών εβδομάδων με βάση τo ISO 8601.
Έστω ότι θέλουμε να δούμε σε βάθος ενός χρόνου στατιστικά που βασίζονται σε εβδομαδιαία διαστήματα. Για παράδειγμα, ας πάρουμε τον εβδομαδιαίο τζίρο παραγγελιών από την AdventureWorks για το 2013 ώστε να δούμε ποιες βδομάδες είχαν περισσότερο ή λιγότερο τζίρο. Για το παράδειγμά μας θα θεωρήσουμε ότι η πρώτη μέρα της βδομάδας είναι η Δευτέρα και θα προσπαθήσουμε να χωρίσουμε το έτος σε βδομάδες. Kοιτάζοντας το ημερολόγιο μας βλέπουμε ότι η 01/01/2013 ήταν ημέρα Τρίτη. Αυτό σημαίνει ότι η πρώτη βδομάδα δεν είναι ουσιαστικά ολόκληρη βδομάδα αν ξεκινήσουμε από 1/1/2013 και επομένως συγκρίνοντας το τζίρο αυτής με άλλες βδομάδες, "αδικούμε" κατά κάποιο τρόπο τη βδομάδα αυτή. Το ίδιο πρόβλημα έχουμε και με την τελευταία εβδομάδα του 2013 που ουσιαστικά περιλαμβάνει 2 μέρες μόνο. Επιπλέον αν τα αποτελέσματα αυτά τα χρησιμοποιήσει στην συνέχεια κάποιος για να βγάλει για παράδειγμα μέσο όρο ανά βδομάδα, οι 2 ακριανές εβδομάδες θα αλλοιώνουν το σωστό αποτέλεσμα.
Για να λυθούν προβλήματα σαν το παραπάνω η DATEPART μπορεί να δεχτεί ως όρισμα εκτός από το week (ή wk ή ww) που μας επιστρέφει τον αριθμό της εβδομάδας στην οποία βρισκόμαστε με την λογική που παρουσιάζεται παραπάνω, το ISO_WEEK (ή isowk ή isoww). Με την παράμετρο αυτή, η datepart μας επιστρέφει τον αριθμό της βδομάδας με βάση το ISO 8601. Η αρίθμηση αυτή ακολουθεί την εξής λογική: ορίζουμε ως πρώτη βδομάδα του χρόνου εκείνη στην οποία πέφτει η πρώτη Πέμπτη της χρονιάς. Η πρώτη μέρα που θα ανήκει στην βδομάδα αυτή εξαρτάται από την ημερά που έχουμε ορίσει να ξεκινάει η βδομάδα. Η αρίθμηση στις βδομάδες προχωράει μέχρι να φτάσουμε στην πρώτη της επόμενης χρονιάς και έτσι έχουμε 53 με 54 ολόκληρες εβδομάδες. Με τον τρόπο αυτό λοιπόν μπορούμε να έχουμε καλύτερα στατιστικά σε βάθος ενός χρόνου ανά βδομάδα, πρέπει όμως να προσέχουμε ότι το διάστημα θα είναι 31/12/2012 με 29/12/2013 και όχι 1/1/2013 με 31/12/2013. Παρακάτω βλέπουμε αντιστοιχία isoweek , με week για διάφορες ημερομηνίες
date iso_week week_num week_day week_day_name
-------- ----------- ----------- ------------------------------ -------------
20121230 52 53 Sunday 7
20121231 1 54 Monday 1
20130101 1 1 Tuesday 2
20130102 1 1 Wednesday 3
20130103 1 1 Thursday 4
20130104 1 1 Friday 5
20130105 1 1 Saturday 6
20130106 1 1 Sunday 7
20130107 2 2 Monday 1
20130108 2 2 Tuesday 2
20131229 52 52 Sunday 7
20131230 1 53 Monday 1
20131231 1 53 Tuesday 2