2011-12-21 48 views

Trả lời

17
SELECT * 
FROM Table 
WHERE Date = (SELECT MAX(Date) 
       FROM Table 
       WHERE Date < (SELECT MAX(Date) 
           FROM Table 
          ) 
      ) ; 

hay:

SELECT TOP (1) * 
FROM Table 
WHERE Date < (SELECT MAX(Date) 
       FROM Table 
      ) 
ORDER BY Date DESC ; 

hay:

SELECT * 
FROM 
    (SELECT t.* 
     , ROW_NUMBER() OVER(ORDER BY Date DESC) AS RowNumber 
    FROM Table t 
) AS tmp 
WHERE RowNumber = 2 ; 

Nếu cột Date có giá trị duy nhất, cả ba truy vấn sẽ cho kết quả tương tự. Nếu cột có thể có ngày trùng lặp, thì chúng có thể cho kết quả khác nhau (khi có quan hệ ở vị trí thứ nhất hoặc thứ hai). Truy vấn đầu tiên thậm chí sẽ cho nhiều hàng trong kết quả nếu có các mối quan hệ ở vị trí thứ 2.

+0

Tất cả đều trả về hai bản ghi nếu ngày tháng giống nhau, bất kỳ giải pháp nào cho điều này? –

+0

Truy vấn thứ 2 và thứ 3 sẽ luôn trả về 1 bản ghi hoặc không có. –

+0

Vì vậy, nó phụ thuộc vào cách bạn muốn đối phó với các mối quan hệ. Bạn muốn trả lại điều gì khi tất cả các hàng có ngày giống hệt nhau? –

7
"select TOP (1) * 
from Table 
WHERE Date<(SELECT MAX(Date) FROM Table) 
ORDER BY Date DESC" 

nên thực hiện thủ thuật.

+0

này bởi ngày giảm dần và nó sẽ: D trừ giới hạn không có trong SQL 2008 ... nhưng đầu là. – xQbert

+3

Điều khoản 'LIMIT' không được hỗ trợ trong SQL Server. Sử dụng 'TOP' để thay thế. http://msdn.microsoft.com/en-us/library/ms189463.aspx –

+0

Vâng, cảm ơn vì gợi ý! Tôi đã chỉnh sửa nó. – Quasdunk

1

Vui lòng kiểm tra mã này.

SELECT * FROM category WHERE Created_Time <(SELECT MAX(Created_Time) FROM category) ORDER BY Created_Time DESC LIMIT 1 

Prasad.

+1

'LIMIT' không hoạt động trong ** SQL SERVER **, đó là cú pháp MySQL –

+0

Xin lỗi. Lỗi của tôi. Tôi không thấy máy chủ SQL nào. Cảm ơn vì đã nhận thấy điều đó. –

1

chọn ngày cuối cùng thứ hai trong sql:

SELECT MAX(YourDateColumn) FROM YourTable where ColumnId=2 and YourDateColumn < 
(SELECT MAX(YourDateColumn) FROM YourTable where ColumnId=2) 

hy vọng giúp một ai đó.

0

Hãy thử để

SELECT * 
FROM Table 
WHERE Date = (SELECT MAX(Date) FROM Table 
      WHERE Date < (SELECT MAX(Date) FROM Table) 
     ) ; 
Các vấn đề liên quan