2008-09-24 34 views
5

Tôi đang cố gắng viết truy vấn sẽ kéo trở lại hai hàng gần đây nhất từ ​​bảng Bill nơi cờ Ước tính là đúng. Việc nắm bắt được rằng những cần phải được các hóa đơn liên tiếp.Tìm hai hàng liên tiếp

Để đặt ngay, tôi cần nhập một hàng trong bảng khác nếu một Dự luật đã được ước tính cho hai chu kỳ thanh toán cuối cùng.

Tôi muốn làm điều này mà không cần con trỏ, nếu có thể, vì tôi đang làm việc với một lượng lớn dữ liệu và điều này phải chạy khá thường xuyên.

Sửa

Có một autoincrement (1,1) cột trên bàn. Nếu không cho đi quá nhiều về cấu trúc bảng, bảng là cơ bản của cấu trúc:


CREATE TABLE Bills (
    BillId INT AUTOINCREMENT(1,1,) PRIMARY KEY, 
    Estimated BIT NOT NULL, 
    InvoiceDate DATETIME NOT NULL 
) 

Vì vậy, bạn có thể có một tập hợp các kết quả như sau:

 
BillId    AccountId   Estimated InvoiceDate 
-------------------- -------------------- --------- ----------------------- 
1111196    1234567    1   2008-09-03 00:00:00.000 
1111195    1234567    0   2008-08-06 00:00:00.000 
1111194    1234567    0   2008-07-03 00:00:00.000 
1111193    1234567    0   2008-06-04 00:00:00.000 
1111192    1234567    1   2008-05-05 00:00:00.000 
1111191    1234567    0   2008-04-04 00:00:00.000 
1111190    1234567    1   2008-03-05 00:00:00.000 
1111189    1234567    0   2008-02-05 00:00:00.000 
1111188    1234567    1   2008-01-07 00:00:00.000 
1111187    1234567    1   2007-12-04 00:00:00.000 
1111186    1234567    0   2007-11-01 00:00:00.000 
1111185    1234567    0   2007-10-01 00:00:00.000 
1111184    1234567    1   2007-08-30 00:00:00.000 
1111183    1234567    0   2007-08-01 00:00:00.000 
1111182    1234567    1   2007-07-02 00:00:00.000 
1111181    1234567    0   2007-06-01 00:00:00.000 
1111180    1234567    1   2007-05-02 00:00:00.000 
1111179    1234567    0   2007-03-30 00:00:00.000 
1111178    1234567    1   2007-03-02 00:00:00.000 
1111177    1234567    0   2007-02-01 00:00:00.000 
1111176    1234567    1   2007-01-03 00:00:00.000 
1111175    1234567    0   2006-11-29 00:00:00.000 

Trong trường hợp này, chỉ ghi 1.111.188 và 1111187 sẽ liên tiếp.

+0

... làm các hàng có một trường id? – Swati

+0

Bạn có thể đăng thêm thông tin không? Có thể là một tập dữ liệu mẫu để chúng ta có thể thấy các trường hợp "liên tiếp" và "không liên tiếp". –

+0

Như nhận xét ở trên câu trả lời phụ thuộc vào những gì bạn đang xem xét 'liên tiếp' hàng. Xin vui lòng cho một ví dụ. – rslite

Trả lời

11

Giả sử các hàng có ID tuần tự, một cái gì đó như thế này có thể là những gì bạn đang tìm kiếm:

select top 1 * 
from 
Bills b1 
inner join Bills b2 on b1.id = b2.id - 1 
where 
b1.IsEstimate = 1 and b2.IsEstimate = 1 
order by 
b1.BillDate desc 
+1

Tôi nghĩ, giả thiết này có thể thiếu sót. Chèn không thành công (ví dụ: một giao dịch 'đã đặt trước' một id nhưng được cuộn lại), có nghĩa là các chuỗi hợp lệ không còn tuần tự. – Neil

0

Bạn sẽ có thể để làm một descensing sắp xếp truy vấn trên ước tính = true và chọn top 2. Tôi không phải người giỏi nhất trong SQL vì vậy tôi không thể cung cấp cho cấu trúc ngôn ngữ chính xác

0

Bạn có một cột cho "số thứ tự ", ví dụ, nếu Q12008 là tuyên bố 28 cho một khách hàng cụ thể, thì hóa đơn của Q22008 sẽ là 29, hóa đơn của Q32008 sẽ là 30 (giả định thanh toán hàng quý). Sau đó bạn có thể kiểm tra xem các số câu lệnh có liền kề thay vì phải thực hiện thao tác ngày hay không.

2
select top 2 * 
from bills 
where estimated = 1 
order by billdate desc 
+0

thankyou, thast những gì tôi đã nói về nhưng tôi couldnt đến với các truy vấn chính xác mà không tham gia một trong khi :) – mattlant

+0

Sẽ không trả lại TẤT CẢ hóa đơn ước tính, chỉ cần sắp xếp theo ngày, giảm dần, bất kể tính liên tục? –

+0

truy vấn này chính xác là cách anh ta nêu câu hỏi. Nhận hai hóa đơn cuối cùng được ước tính từ bảng hóa đơn. Nếu có bất kỳ tiêu chí nào khác, cần phải nêu rõ. – mattlant

Các vấn đề liên quan