Độ trễ SQL

Do Tre Sql



Hàm SQL lag() cho phép bạn truy cập hàng trước đó từ hàng hiện tại ở một độ lệch cụ thể. Nói tóm lại, hàm lag() cho phép bạn truy cập hàng trước từ hàng hiện tại. Bằng cách chỉ định giá trị offset, bạn có thể truy cập các hàng 1, 2, 3, v.v. trước đó từ hàng hiện tại.

Nó ngược lại với hàm lead() cho phép bạn truy cập các hàng tiếp theo.







Độ trễ SQL()

Cú pháp hàm như sau:



LAG(biểu thức giá trị, offset [, mặc định])
QUA (
[PHẦN THAM GIA THEO biểu thức phân vùng]
ĐẶT HÀNG THEO biểu_thức sắp xếp [ASC | MÔ TẢ]
);

Sau đây là các đối số được hỗ trợ:



  • biểu thức giá trị – Nó chỉ định giá trị trả về của hàng trước đó. Biểu thức phải đánh giá thành một giá trị duy nhất.
  • bù lại – Nó chỉ định có bao nhiêu hàng lùi từ hàng hiện tại để truy cập.
  • mặc định – Nó đặt giá trị mặc định nếu offset nằm ngoài phạm vi của phân vùng. Theo mặc định, giá trị được đặt thành NULL.
  • Phân vùng theo – Nó chỉ định cách phân vùng dữ liệu.
  • Đặt bởi – Nó thiết lập định dạng thứ tự cho các hàng trong mỗi phân vùng.

Thiết lập dữ liệu mẫu

Trước khi đi sâu vào hoạt động của hàm lag(), chúng ta hãy bắt đầu bằng cách thiết lập một bảng cơ bản cho mục đích minh họa.





TẠO sản phẩm BẢNG (
sản phẩm_id INT KHÓA CHÍNH AUTO_INCREMENT,
tên_sản phẩm VARCHAR(255),
danh mục VARCHAR(255),
giá DECIMAL(10, 2),
số lượng INT,
ngày hết hạn DATE,
mã vạch BIGINT
);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Mũ đầu bếp 25cm',
'cửa hàng bánh mì',
24,67,
57,
'2023-09-09',
2854509564204);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Trứng cút - Đóng hộp',
'nhà bếp',
17,99,
67,
'2023-09-29',
1708039594250);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Cà phê - Egg Nog Capuccino',
'cửa hàng bánh mì',
92,53,
10,
'2023-09-22',
8704051853058);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
các giá trị ('Quả lê - Gai',
'cửa hàng bánh mì',
65,29,
48,
'2023-08-23',
5174927442238);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Pasta - Angel Hair',
'nhà bếp',
48,38,
59,
'2023-08-05',
8008123704782);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Rượu vang - Prosecco Valdobiaddene',
'sản xuất',
44,18,
3,
'2023-03-13',
6470981735653);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Bánh ngọt - Các loại nhỏ kiểu Pháp',
'nhà bếp',
36,73,
52,
'2023-05-29',
5963886298051);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
các giá trị ('Cam - Đóng hộp, Quan thoại',
'sản xuất',
65,0,
1,
'2023-04-20',
6131761721332);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Thịt lợn - Vai',
'sản xuất',
55,55,
73,
'2023-05-01',
9343592107125);

chèn
vào trong
sản phẩm (tên_sản phẩm,
loại,
giá,
Số lượng,
ngày hết hạn,
mã vạch)
giá trị ('Dc Hikiage Hira Huba',
'sản xuất',
56,29,
53,
'2023-04-14',
3354910667072);

Khi quá trình tạo và thiết lập dữ liệu hoàn tất, chúng ta hãy tiến hành thảo luận về một số ví dụ.

Ví dụ 1: Cách sử dụng cơ bản

Trong trường hợp này, chúng ta có quyền truy cập vào bảng “products” chứa thông tin sản phẩm. Giả sử chúng ta muốn lấy mã vạch trước đó từ hàng hiện tại.



Chúng ta có thể sử dụng hàm lag() như sau:

lựa chọn
tên sản phẩm,
giá,
lag(mã vạch) qua (phân vùng theo danh mục
đặt bởi
giá tăng dần) như trước_item
từ
sản phẩm p;

Mã đã cho phân vùng dữ liệu dựa trên danh mục. Sau đó, nó tìm nạp mã vạch trước đó trong phân vùng bằng hàm lag().

Kết quả đầu ra như sau:

Ví dụ 2: Đặt giá trị mặc định

Nếu không có hàng trước đó trong một cột cụ thể (ngoài giới hạn), hàm sẽ đặt giá trị thành NULL như trong ví dụ trước.

Để đặt giá trị mặc định cho mọi quyền truy cập ngoài phạm vi, chúng tôi có thể thực hiện như sau:

lựa chọn
tên sản phẩm,
giá,
lag(barcode, 1, 'N/A') over (phân vùng theo danh mục
đặt bởi
giá tăng dần) như trước_item
từ
sản phẩm p;

Chúng tôi đặt giá trị mặc định thành “N/A”. Điều này sẽ thay thế mọi giá trị ngoài giới hạn như được hiển thị trong đầu ra:

Ví dụ 3: Giá trị bù đắp tùy chỉnh

Giả sử bạn muốn truy cập hai hàng trước từ hàng hiện tại. Chúng ta có thể làm điều đó bằng cách đặt giá trị offset thành 2.

Một truy vấn ví dụ được minh họa như sau:

lựa chọn
tên sản phẩm,
giá,
lag(barcode, 2, 'N/A') over (phân vùng theo danh mục
đặt bởi
giá tăng dần) như trước_item
từ
sản phẩm p;

Đầu ra:

Truy vấn này trả về hai hàng trước đó trong mỗi phân vùng.

Phần kết luận

Trong hướng dẫn này, chúng ta đã học cách làm việc với hàm lag() để lấy mục trước đó từ hàng hiện tại.