SQL Lag

Sql Lag



Η συνάρτηση SQL lag() σάς επιτρέπει να έχετε πρόσβαση στην προηγούμενη σειρά από την τρέχουσα σειρά με μια συγκεκριμένη μετατόπιση. Εν ολίγοις, η συνάρτηση lag() σάς επιτρέπει να έχετε πρόσβαση στην προηγούμενη σειρά από την τρέχουσα. Καθορίζοντας την τιμή μετατόπισης, μπορείτε να αποκτήσετε πρόσβαση στις προηγούμενες 1, 2, 3, κ.λπ., σειρές από την τρέχουσα.

Είναι το αντίθετο της συνάρτησης lead() που σας επιτρέπει να έχετε πρόσβαση στις επόμενες σειρές.







SQL Lag()

Η σύνταξη της συνάρτησης είναι η εξής:



LAG (έκφραση_τιμής, μετατόπιση [, προεπιλογή])
ΠΑΝΩ ΑΠΟ (
[ΔΙΑΜΕΡΙΣΜΑ ΚΑΤΑ partition_expression]
ORDER BY sort_expression [ASC | DESC]
)

Τα ακόλουθα είναι τα υποστηριζόμενα επιχειρήματα:



  • τιμή_έκφραση – Καθορίζει την τιμή επιστροφής της προηγούμενης σειράς. Η έκφραση πρέπει να αξιολογηθεί σε μία μόνο τιμή.
  • αντισταθμίζεται – Καθορίζει πόσες σειρές προς τα πίσω από την τρέχουσα σειρά για πρόσβαση.
  • Προκαθορισμένο – Ορίζει την προεπιλεγμένη τιμή εάν η μετατόπιση είναι εκτός του πεδίου εφαρμογής του διαμερίσματος. Από προεπιλογή, η τιμή έχει οριστεί σε NULL.
  • Διαμέριση από – Καθορίζει τον τρόπο κατάτμησης των δεδομένων.
  • Ταξινόμηση κατά – Ορίζει τη μορφή παραγγελίας για τις σειρές σε κάθε διαμέρισμα.

Δείγμα ρύθμισης δεδομένων

Πριν βουτήξουμε στη λειτουργία της συνάρτησης lag(), ας ξεκινήσουμε δημιουργώντας έναν βασικό πίνακα για σκοπούς επίδειξης.





ΔΗΜΙΟΥΡΓΙΑ ΤΡΑΠΕΖΙΩΝ προϊόντων (
product_id INT PRIMARY KEY AUTO_INCREMENT,
όνομα_προϊόντος VARCHAR(255),
κατηγορία VARCHAR(255),
τιμή DECIMAL(10, 2),
ποσότητα INT,
expiration_date DATE,
barcode BIGINT
)

εισάγετε
σε
προϊόντα (όνομα_προϊόντος,
κατηγορία,
τιμή,
ποσότητα,
ημερομηνία λήξης,
barcode)
τιμές ('Καπέλα σεφ 25 εκ.',
'φούρνος',
24.67,
57,
'09-09-2023',
2854509564204);

εισάγετε
σε
προϊόντα (όνομα_προϊόντος,
κατηγορία,
τιμή,
ποσότητα,
ημερομηνία λήξης,
barcode)
τιμές ('Αυγά ορτυκιού - Κονσερβοποιημένα',
'ντουλάπι',
17.99,
67,
'29-09-2023',
1708039594250);

εισάγετε
σε
προϊόντα (όνομα_προϊόντος,
κατηγορία,
τιμή,
ποσότητα,
ημερομηνία λήξης,
barcode)
αξίες («Καφές - Αυγό Καπουτσίνο»,
'φούρνος',
92,53,
10,
'22-09-2023',
8704051853058);

εισάγετε
σε
προϊόντα (όνομα_προϊόντος,
κατηγορία,
τιμή,
ποσότητα,
ημερομηνία λήξης,
barcode)
τιμές ('Αχλάδι - Φραγκόσυκο',
'φούρνος',
65,29,
48,
'23-08-2023',
5174927442238);

εισάγετε
σε
προϊόντα (όνομα_προϊόντος,
κατηγορία,
τιμή,
ποσότητα,
ημερομηνία λήξης,
barcode)
αξίες («Ζυμαρικά - Μαλλιά Αγγέλου»,
'ντουλάπι',
48.38,
59,
'05-08-2023',
8008123704782);

εισάγετε
σε
προϊόντα (όνομα_προϊόντος,
κατηγορία,
τιμή,
ποσότητα,
ημερομηνία λήξης,
barcode)
αξίες ('Κρασί - Prosecco Valdobiaddene',
'παράγω',
44,18,
3,
'2023-03-13',
6470981735653);

εισάγετε
σε
προϊόντα (όνομα_προϊόντος,
κατηγορία,
τιμή,
ποσότητα,
ημερομηνία λήξης,
barcode)
αξίες («Ζαχαροπλαστική - Γαλλική Μίνι Ποικιλία»,
'ντουλάπι',
36,73,
52,
'29-05-2023',
5963886298051);

εισάγετε
σε
προϊόντα (όνομα_προϊόντος,
κατηγορία,
τιμή,
ποσότητα,
ημερομηνία λήξης,
barcode)
τιμές ('Πορτοκαλί - Κονσερβοποιημένο, Mandarin',
'παράγω',
65,0,
1,
'2023-04-20',
6131761721332);

εισάγετε
σε
προϊόντα (όνομα_προϊόντος,
κατηγορία,
τιμή,
ποσότητα,
ημερομηνία λήξης,
barcode)
τιμές ('Χοιρινό - Ώμος',
'παράγω',
55,55,
73,
'01-05-2023',
9343592107125);

εισάγετε
σε
προϊόντα (όνομα_προϊόντος,
κατηγορία,
τιμή,
ποσότητα,
ημερομηνία λήξης,
barcode)
τιμές ('Dc Hikiage Hira Huba',
'παράγω',
56,29,
53,
'2023-04-14',
3354910667072);

Με την ολοκλήρωση της δημιουργίας και της ρύθμισης δεδομένων, ας προχωρήσουμε στη συζήτηση μερικών παραδειγμάτων.

Παράδειγμα 1: Βασική χρήση

Σε αυτήν την περίπτωση, έχουμε πρόσβαση σε έναν πίνακα 'προϊόντα' που περιέχει τις πληροφορίες του προϊόντος. Ας υποθέσουμε ότι θέλουμε να πάρουμε τον προηγούμενο γραμμωτό κώδικα από την τρέχουσα σειρά.



Μπορούμε να χρησιμοποιήσουμε τη συνάρτηση lag() ως εξής:

επιλέγω
Ονομασία προϊόντος,
τιμή,
lag (barcode) over (διαμέριση ανά κατηγορία
Ταξινόμηση κατά
τιμή αυξημένη) ως προηγούμενο_αντικείμενο
από
προϊόντα p;

Ο κωδικός που δίνεται χωρίζει τα δεδομένα με βάση την κατηγορία. Στη συνέχεια, ανακτά τον προηγούμενο γραμμικό κώδικα στο διαμέρισμα χρησιμοποιώντας τη συνάρτηση lag().

Η έξοδος που προκύπτει είναι η εξής:

Παράδειγμα 2: Ορισμός της προεπιλεγμένης τιμής

Εάν δεν υπάρχει προηγούμενη σειρά σε μια συγκεκριμένη στήλη (εκτός ορίου), η συνάρτηση ορίζει την τιμή σε NULL όπως φαίνεται στο προηγούμενο παράδειγμα.

Για να ορίσουμε μια προεπιλεγμένη τιμή για οποιαδήποτε πρόσβαση εκτός πεδίου εφαρμογής, μπορούμε να κάνουμε τα εξής:

επιλέγω
Ονομασία προϊόντος,
τιμή,
lag (barcode, 1, 'N/A') over (διαμέριση ανά κατηγορία
Ταξινόμηση κατά
τιμή αυξημένη) ως προηγούμενο_αντικείμενο
από
προϊόντα p;

Ορίσαμε την προεπιλεγμένη τιμή σε 'N/A'. Αυτό θα πρέπει να αντικαταστήσει οποιαδήποτε τιμή εκτός ορίου όπως φαίνεται στην έξοδο:

Παράδειγμα 3: Προσαρμοσμένη τιμή μετατόπισης

Ας υποθέσουμε ότι θέλετε να αποκτήσετε πρόσβαση στις δύο προηγούμενες σειρές από την τρέχουσα σειρά. Μπορούμε να το κάνουμε αυτό ορίζοντας την τιμή μετατόπισης σε 2.

Ένα παράδειγμα ερωτήματος απεικονίζεται στα ακόλουθα:

επιλέγω
Ονομασία προϊόντος,
τιμή,
lag (barcode, 2, 'N/A') over (διαμέριση ανά κατηγορία
Ταξινόμηση κατά
τιμή αυξημένη) ως προηγούμενο_αντικείμενο
από
προϊόντα p;

Παραγωγή:

Αυτό το ερώτημα επιστρέφει τις δύο προηγούμενες σειρές σε κάθε διαμέρισμα.

συμπέρασμα

Σε αυτό το σεμινάριο, μάθαμε πώς να δουλεύουμε με τη συνάρτηση lag() για να λάβουμε το προηγούμενο στοιχείο από την τρέχουσα σειρά.