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

相関サブクエリでのMySQLLIMIT

    これは、greatest-n-per-groupのバリエーションです。 頻繁に発生する問題。

    FinishTierPriceからの単一行が必要です(p1と呼びます) )、FinishOptionと一致し、最大の数量を使用しますが、それでもProductOptionTierの数量以下です。

    これを行う1つの方法は、2番目の行(p2)を一致させようとすることです。 )同じFinishOptionとより大きなQtyを持つFinishTierPriceから。そのような行が存在しない場合(外部結合を使用して、それがNULLであることをテストします)、p1によって検出された行 最高です。

    SELECT Product.Name, ProductOption.Name, a.Qty, a.Price, SheetSize.UpgradeCost,
            FinishType.Name, FinishOption.Name, FinishTierPrice.Qty, FinishTierPrice.Price
    FROM `Product`
        JOIN `ProductOption`
            ON Product.idProduct = ProductOption.Product_idProduct
        JOIN `ProductOptionTier` AS a
            ON a.ProductOption_idProductOption = ProductOption.idProductOption
        JOIN `PaperSize`
            ON PaperSize.idPaperSize = ProductOption.PaperSize_idPaperSize
        JOIN `SheetSize`
            ON SheetSize.PaperSize_idPaperSize = PaperSize.idPaperSize
        JOIN `FinishOption`
            ON FinishOption.Product_idProduct = Product.idProduct
        JOIN `FinishType`
            ON FinishType.idFinishType = FinishOption.Finishtype_idFinishType
        JOIN `FinishTierPrice` AS p1
            ON p1.FinishOption_idFinishOption = FinishOption.idFinishOption
            AND p1.Qty <= a.Qty
        LEFT OUTER JOIN `FinishTierPrice` AS p2
            ON p2.FinishOption_idFinishOption = FinishOption.idFinishOption
            AND p2.Qty <= a.Qty AND (p2.Qty > p1.Qty OR p2.Qty = p1.Qty 
                AND p2.idFinishTierPrice > p1.idFinishTierPrice)
    WHERE Product.idProduct = 1
        AND p2.idFinishTierPrice IS NULL
    



    1. ストアドプロシージャを実行するためのHibernate4のネイティブOracleConnectionへのハンドルの取得

    2. SQL-alchemy:ValueErrorの値が多すぎて解凍できませんか?

    3. 他の列からの順序に基づいて、グループから1つの値を選択します

    4. Oracleによるページング