sql >> データベース >  >> RDS >> Sqlserver

where句でselect max()関数を使用してSQLクエリを改善する

    これを試してください:

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

    編集 OPのコメントに基づく:

    CTEを使用した上記のクエリは、 @Remus Rusanu からの派生テーブル バージョン

    ただし、 productprice の場合 テーブルが大きい場合は、「OnSale でフィルタリングして減らすことができます。 " ここのように:

    ;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. Postgresの`gin_trgm_ops`インデックスは使用されていません

    2. 過去4四半期のデータを表示するビューを作成するにはどうすればよいですか?

    3. Oracle PL/SQLパフォーマンスチューニングのクラッシュコース

    4. Oracle外部テーブル:高度なフラットファイルレイアウト