sql >> Databáze >  >> RDS >> Sqlserver

Vylepšete dotaz SQL pomocí funkce select max() v klauzuli where

zkuste toto:

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

UPRAVIT na základě komentáře OP:

Myslím, že výše uvedený dotaz s CTE bude mít stejný plán dotazů jako verze tabulky odvozená od @Remus Rusanu

Pokud však productprice tabulka je velká, možná ji budete chtít zmenšit filtrováním podle "OnSale " jako zde:

;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. mysql while loop Break ekvivalent

  2. vytvořit tabulku milionů v databázi?

  3. složený (alfanumerický) primární klíč a automatický přírůstek

  4. SQL Server 2008 R2 HASHBYTES SHA2 vrátí hodnotu null