MariaDB - 返回每个产品的 1 行和 2 列、当前成本和上次成本

问题描述 投票:0回答:1
产品 批次# 日期 成本
苹果 1 05/24/24 30
苹果 2 05/23/24 29
梨子 3 05/22/24 28
梨子 4 05/21/24 27
浆果 5 05/20/24 26
浆果 6 05/19/24 25
苹果 7 05/18/24 24
苹果 8 05/17/24 23
梨子 9 05/16/24 22
梨子 10 05/15/24 21
浆果 11 05/14/24 20
浆果 12 05/13/24 19

我想要的结果

产品 批次# 日期 成本 最后一批# 最后日期 最后费用
苹果 1 05/24/24 30 2 05/23/24 29
梨子 3 05/22/24 30 4 05/21/24 29
浆果 5 05/20/24 30 6 05/19/24 29

我的目标是根据日期获取任何产品的最新 2 批次 如果我可以在单独的专栏中进行一些比较数学也会很好,但我会很高兴获得任何帮助......

这是我到目前为止所得到的,但不确定如何解释日期,或者即使这是正确的方向。

SELECT
    `productNumber`,
    `unitCost`,
    `purchaseOrder`,
    `productDesc`
FROM
    (
    SELECT
        `productNumber`,
        `unitCost`,
        `purchaseOrder`,
        `productDesc`,
        (
            @rn := IF(@prev = `productNumber`, @rn +1, 1)
        ) AS rownumb,
        @prev := `productNumber`
    FROM
        (
        SELECT
            `productNumber`,
            `unitCost`,
            `purchaseOrder`,
            `productDesc`
        FROM
            `inboundDetails`
        ORDER BY
            `productNumber`
        DESC
            ,
            `unitCost`
    ) AS sortedlist
JOIN(
SELECT
    @prev := NULL,
    @rn := 0
) AS vars
) AS groupedlist
WHERE
    rownumb <= 2
ORDER BY
    `productNumber`
DESC
    ,
    `unitCost`
mariadb greatest-n-per-group
1个回答
0
投票

您可以使用窗口函数 row_number() 来检测最后一行和前一行。
然后通过 Lead(...) 函数进行旋转。

参见示例

产品 LotN 日期 成本
苹果 1 2024-05-24 30
苹果 2 2024-05-23 29
梨子 3 2024-05-22 28
梨子 4 2024-05-21 27
浆果 5 2024-05-20 26
浆果 6 2024-05-19 25
苹果 7 2024-05-18 24
苹果 8 2024-05-17 23
梨子 9 2024-05-16 22
梨子 10 2024-05-15 21
浆果 11 2024-05-14 20
浆果 12 2024-05-13 19
香蕉 13 2024-05-13 9
select Product, LotN lastLotN,Date LastDate,Cost LastCost, rn
  ,prevLotN,prevDate,prevCost
from(    
select *
  ,lead(LotN)over(partition by Product order by date desc) prevLotN
  ,lead(Date)over(partition by Product order by date desc) prevDate
  ,lead(Cost)over(partition by Product order by date desc) prevCost
  ,row_number()over(partition by Product order by date desc)rn
from inboundDetails
)a
where rn=1
产品 最后一批N 最后日期 最后成本 rn prevLotN 上一个日期 上一篇费用
苹果 1 2024-05-24 30 1 2 2024-05-23 29
香蕉 13 2024-05-13 9 1
浆果 5 2024-05-20 26 1 6 2024-05-19 25
梨子 3 2024-05-22 28 1 4 2024-05-21 27

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.