Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Tingkatkan Sql Query dengan fungsi select max() di mana klausa

coba ini:

;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'

EDIT berdasarkan komentar OP:

Saya pikir kueri di atas dengan CTE akan memiliki rencana kueri yang sama dengan versi tabel turunan dari @Remus Rusanu

Namun, jika productprice tabel besar, Anda mungkin ingin menguranginya dengan memfilter berdasarkan "OnSale " seperti di sini:

;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. login gagal untuk pengguna 'sa'. Pengguna tidak terkait dengan koneksi SQL Server tepercaya. (Microsoft SQL Server, Kesalahan:18452) di sql 2008

  2. Cara memperbarui tabel berdasarkan parameter XML

  3. Gagal masuk. Login gagal untuk pengguna 'NT AUTHORITY\SYSTEM'

  4. bagaimana cara mengetahui halaman indeks defragment di sql server 2008 menggunakan skrip?

  5. Hitung Total Biaya Kepemilikan Pemantauan SQL Server Anda