go backsqlschool blogs list

ISO_WEEK

by 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
Ημερομηνία: 09 May 2016 22:01
Αξιολόγηση:
Κατηγορίες:
Tags:
Share it:

Αφήστε το σχόλιο σας - Leave your comment

Τα σχόλια έχουν κλείσει.
Επιτρέπονται μόνο τα σχόλια από τα μέλη του SqlSchool.gr.


newsletter subscription

Εάν επιθυμείτε να λαμβάνετε ενημέρωση από εμάς, δώστε μας το e-mail σας.
PASS chapter logo
Official Professional Association for SQL Server (PASS) chapter for Greece
Join to PASS