Saya memiliki tabel yang berisi beberapa kolom dan ingin memeriksa nilai kolom, pilih baris setelah nilai kolom sampai nilai kolom terpisah muncul. Saya telah mencoba menggunakan BETWEEN
, tetapi jika nilai kolom bilangan bulat itu hanya mencari angka antara bilangan bulat.
Misalnya, jika saya memiliki tabel seperti ini:
nilai waktu id t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 16 t5 12:10 PM 250 t5 12:15 PM 15 t8 11:00 15:00 t8 15:00 2 t8 15:05 100 t2 19:00 15 t2 19:01 16 t15 5:00 pagi 35
Saya ingin mendapatkan baris antara nilai 15 dan 16. Pada dasarnya, jika saya bisa mengurutkan berdasarkan id
, kemudian time
, dan mengumpulkan baris setelah 15 muncul sampai ada nilai 16 di dalam yang sama id
. Jika tidak ada nilai 16, saya ingin 100 baris berikutnya misalnya dan kemudian mencari nilai 15 berikutnya.
Saya ingin kueri mengembalikan ini:
nilai waktu id t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 16 t2 19:00 15 t2 19:01 16 t5 12:15 PM 15 t8 11:00 15:00 t8 15:00 2 t8 15:05 100
Itu mungkin membingungkan. Saya sudah mencoba:
SELECT * FROM table WHERE value BETWEEN '15' AND '16' ORDER BY id, time
sebagai titik awal, tetapi itu hanya mengembalikan baris dengan nilai 15 atau 16 karena mereka bilangan bulat.
Saya ingin menyortir meja id
saat itu time
. Entri ini ditambahkan secara otomatis melalui sistem lain jadi saya mencoba untuk menanyakan tabel untuk rentang nilai tertentu.
Ada ide?
Klarifikasi:
Jika saya harus baris dengan 15, 1, 16, 7, 15, 2, 16
yang sama id
, saya ingin kedua "pulau": 15, 1, 16, 15, 2, 16
.
Jawaban:
Saran yang seharusnya berfungsi dalam versi 2008.
Diuji di rextester.com :
Info lebih lanjut:
sumber
sumber
COUNT(*) OVER (ORDER BY ..)
diizinkan