gpt4 book ai didi

sql - 根据两列的分组插入表格数据

转载 作者:行者123 更新时间:2023-12-04 22:06:13 25 4
gpt4 key购买 nike

我有一个具有以下格式的 oracle 表,例如:

JLID    Dcode   SID     TDT            QTY  
8295783 3119255 9842 3/5/2018 14
8269771 3119255 9842 3/6/2018 11
8302211 3119255 1126 3/1/2018 19

这里我对同一个Dcode有不同的SID,现在我需要获得最大数量的SID。 (即)对于 SID 9842 - (14+11)=25,对于 SID 1126 它是 19,那么结果应该在 SID 9842 上。所以,我们的查询应该返回以下结果

JLID    Dcode   START_DT    END_DT           SID       
111 3119255 3/1/2018 3/31/2018 12:00 9842

开始日期和结束日期应根据 TDT 计算(即开始日期是该月的第一天,结束日期是该月的最后一天)谁能给我一些建议。

最佳答案

可能就这么简单:

SELECT Dcode, start_date, end_date, SID FROM (
SELECT Dcode, SID, TRUNC(start_date, 'MONTH') AS start_date
, LAST_DAY(end_date) AS end_date
, ROW_NUMBER() OVER ( PARTITION BY Dcode ORDER BY total_qty DESC ) AS rn
FROM (
SELECT Dcode, SID, MIN(TDT) AS start_date, MAX(TDT) AS end_date
, SUM(QTY) AS total_qty
FROM mytable
GROUP BY Dcode, SID
)
) WHERE rn = 1

在最内部的子查询中,我聚合以获得特定值的日期范围和总量 DcodeSID。然后我使用分析(窗口)函数来获取总数量最大的行。 (如果您想返回具有相同数量的多个 SID 值,您可能想使用 RANK() 代替 ROW_NUMBER()。)

关于sql - 根据两列的分组插入表格数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49485724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com