Dùng LIMIT trong MSSQL
Posted by quocbao on February 18th, 2008Một vấn đề nan giải khi chuyển từ Mysql sang Mssql là câu query quen thuộc
SELECT * FROM t ORDER BY c LIMIT o,n
Dĩ nhiên nếu ném vào MS SQL Server thì nó “chữi” cho mà nghe .__.
Sau một hồi tìm tòi cuối cùng cũng tìm ra một cách
Cách này rất là đơn giản, đơn giản đến độ mình ko nghĩ ra được :))
1. MsSql có keyword TOP để chọn n dòng đầu
2. Mình đang muốn chọn n dòng đầu bắt đầu từ vị trí o
Nó đưa ra một giải pháp khá đơn giản như sau .__.
SELECT * FROM (
SELECT TOP o * FROM (
SELECT TOP o+n FROM t
ORDER BY c ASC
) AS tmp1 ORDER BY c DESC
) AS tmp2 ORDER BY c ASC
Tức là sao,đầu tiên chọn n+o dòng xếp theo thứ tự tăng. Sau đó chọn lại o dòng xếp theo thứ tự giảm (tức là chọn từ dưới lên), sau đó xếp lại thành thứ tự tăng => LIMIT o,n
Một cái dở là luôn phải tồn tại cột để order mới xếp đc và dữ liệu bị “nhào nặn” tùm lum chứ ko simple như Mysql. Không biết thật sự performance thì sao nhỉ
Để bửa nào test thử.
Recent Comments