Bộ phận quản trị rủi ro muốn biết, với mỗi mã, phiên nào có % biến động giá thấp nhất (giảm sâu nhất) so với phiên liền trước.
Với mỗi mã có ít nhất 2 phiên, hãy xuất đúng 1 dòng: trade_date của phiên có pct_thay_doi nhỏ nhất và giá trị đó (pct_thay_doi = 100 * (close - prev_close) / prev_close, làm tròn 2 chữ số, DECIMAL(18,2)). Nếu nhiều phiên cùng mức thấp nhất thì lấy phiên sớm nhất. Mã tăng liên tục thì mức thấp nhất là số dương (vẫn xuất).
Sắp xếp theo pct_thay_doi tăng dần (giảm sâu nhất trước), đồng giá trị thì theo symbol.
Gợi ý: cần hai lớp — LAG để tính % thay đổi, rồi ROW_NUMBER() OVER (PARTITION BY symbol ORDER BY pct, trade_date) để chọn dòng đầu tiên của mỗi mã.
Bảng MarketPrices(symbol, trade_date, close_price).
symbol, trade_date, pct_thay_doi (TAB); sắp xếp theo pct_thay_doi, symbol.
Ví dụ:
Đầu vào:
Đầu ra:
CEO 2026-09-23 -3.33
VCS 2026-09-22 -3.19
SHS 2026-09-25 -3.16
PVS 2026-09-22 -3.06
HPG 2026-09-15 -3.00
FPT 2026-09-23 -2.97
VNM 2026-09-21 -2.97
VCB 2026-09-15 -2.94
PVI 2026-09-17 -2.91
IDC 2026-09-25 -2.75
NVB 2026-09-21 -2.11
MBS 2026-09-15 -2.00
Giải thích:
Đang tải editor...