Trước hết, trong SQL theo dữ liệu định nghĩa không có bất kỳ thứ tự nào trừ khi ORDER BY
được sử dụng.
Xem: Wikipedia - Đặt hàng theo
Bạn phải cung cấp một cột bổ sung cho bảng của mình để xác định thứ tự và có thể được sử dụng trong ORDER BY
mệnh đề, ví dụ:RN
trong ví dụ dưới đây:
RN CS_ID
---------- ----------
1 a
2 b
3 a
4 a
5 a
6 b
7 b
8 b
9 b
Đối với dữ liệu trên, bạn có thể sử dụng Biểu thức bảng chung (truy vấn đệ quy) để nhận kết quả cần thiết, ví dụ:truy vấn dưới đây hoạt động trên cơ sở dữ liệu Oracle:
WITH my_query( RN, cs_id , cont ) AS (
SELECT t.rn, t.cs_id, 1
FROM My_table t
WHERE rn = 1
UNION ALL
SELECT t.rn, t.cs_id,
case when t.cs_id = m.cs_id
then m.cont + 1
else 1
end
FROM My_table t
JOIN my_query m
ON t.rn = m.rn + 1
)
select * from my_query
order by rn;
RN CS_ID CONT
---------- ---------- ----------
1 a 1
2 b 1
3 a 1
4 a 2
5 a 3
6 b 1
7 b 2
8 b 3
9 b 4