Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tìm giá trị khác 0 trước đó từ danh sách theo thứ tự ngày

Đây là bảng mẫu của bạn

SELECT * INTO #TEMP
FROM
(
SELECT 'Item1' [Item Name],      '01/01/2013' [Date], 10.00 [Price]
UNION ALL
SELECT 'Item1',      '02/01/2013', 9.50
UNION ALL
SELECT 'Item1',      '03/01/2013', 0
UNION ALL
SELECT 'Item1',      '04/01/2013', 7.50
UNION ALL
SELECT 'Item1',     '05/01/2013', 0.00
UNION ALL
SELECT 'Item1',     '06/01/2013', 0.00
UNION ALL
SELECT 'Item1',     '07/01/2013', 11.00
UNION ALL
SELECT 'Item2',      '01/01/2013', 0.00
UNION ALL
SELECT 'Item2',     '02/01/2013', 12.00
UNION ALL
SELECT 'Item2',      '03/01/2013', 0.00
UNION ALL
SELECT 'Item2',      '04/01/2013', 0.00
UNION ALL
SELECT 'Item2',     '05/01/2013', 13.00
)TAB

Và truy vấn kết quả

 SELECT [Item Name],[Date],
CASE WHEN [Price]=0 THEN 
    ISNULL((SELECT TOP 1 [Price]
     FROM #TEMP T2 
     WHERE CAST(T2.[Date] AS DATE)<T1.[Date] AND T1.[Item Name]=T2.[Item Name] AND T2.[Price]>0
     ORDER BY CAST(T2.[Date] AS DATE) DESC),0) 
    ELSE [Price] END [Price]
FROM #TEMP T1

Kết quả của bạn là ở đây

Đây là Fiddle đang hoạt động http://sqlfiddle.com/#!3/afabd/1 (Nếu nó hiển thị bất kỳ lỗi nào khi tải trang, hãy nhấn RUNSQL, nó sẽ hoạt động)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chức năng phân chia bằng dấu phẩy trong SQL Server 2008

  2. PIVOT trong sql 2005

  3. Loại dữ liệu được trả về thay đổi dựa trên dữ liệu trong bảng

  4. PHP 5.3 không nhận ra Native Client để kết nối với MS SQL

  5. SQL Server Intellisense không hoạt động trên * một số * máy chủ