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

Cải thiện truy vấn Sql với hàm select max () trong mệnh đề where

hãy thử cái này:

;WITH CurrentPrice AS 
(
SELECT productid,max(Date) AS Date
    FROM productprice 
    WHERE date < @DateIn 
    GROUP BY productid
)

select  
    p.ProductName,
    pp.Price,
    pp.Date,
    from product p
        inner join CurrentPrice pa  on p.productid = pa.productid
        inner join productprice pp  on pa.productid = pp.productid AND pa.Date=pp.Date
    where p.producttype = 'OnSale'

CHỈNH SỬA dựa trên nhận xét của OP:

Tôi nghĩ rằng truy vấn ở trên với CTE sẽ có cùng một kế hoạch truy vấn với phiên bản bảng dẫn xuất từ ​​@Remus Rusanu

Tuy nhiên, nếu productprice bảng lớn, bạn có thể muốn giảm nó bằng cách lọc theo "OnSale "như đây:

;WITH CurrentPrice AS 
(
select  
    p.productid,
    MAX(pp.Date) AS Date
    from product p
        inner join productprice pp  on pa.productid = pp.productid
    where p.producttype = 'OnSale' AND pp.date < @DateIn 
    GROUP BY productid
)
select  
    p.ProductName,
    pp.Price,
    pp.Date,
    from CurrentPrice           pa
        inner join product      p   on pa.productid = p.productid
        inner join productprice pp  on pa.productid = pp.productid AND pa.Date=pp.Date
    where p.producttype = 'OnSale'


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hỗ trợ phương ngữ SQL 2008 cho NHibernate

  2. Thực thi các câu lệnh chuẩn bị do NHibernate tạo trong SQL Server Management Studio

  3. Làm cách nào để lấy danh sách Máy chủ SQL có sẵn bằng C # Code?

  4. Cách thêm cột mới vào bảng hiện có trong SQL Server (T-SQL)

  5. Count (*) trả về null