为每个项目创建订单的降序列表,并在单独的列中显示排名位置

如何解决为每个项目创建订单的降序列表,并在单独的列中显示排名位置

DB-Fiddle

CREATE TABLE operations (
    id int auto_increment primary key,orderID VARCHAR(255),itemID VARCHAR(255),event_date DATE,order_volume INT,shipped_volume INT
);

INSERT INTO operations
(itemID,orderID,event_date,order_volume,shipped_volume
)
VALUES 
("Item_01","Order_XYZ","2020-05-01","600","0"),("Item_01","2020-05-18","0","315"),"Order_MTE","2020-08-15","400","2020-08-23","120"),"Order_OBD","2020-08-21","500","2020-11-17","380"),("Item_02","Order_TLP","2020-02-02","2020-02-10","175"),"Order_SNE","2020-02-03","900","2020-03-18","620"),"Order_ADF","2020-03-27","100","2020-03-28","30"),"Order_ZGO","2020-04-15","375","2020-04-17",("Item_03","Order_BBI","2020-03-12","700","2020-10-25","280"),("Item_04","Order_DXR","2020-12-09","260","2020-12-15","110");

预期结果:

        itemID    |   orderID   |    order_volume  |   shipped_volume  |      position
------------------|-------------|------------------|-------------------|--------------------
        Item_04   |  Order_DXR  |        260       |      110          |         1
------------------|-------------|------------------|-------------------|--------------------
        Item_03   |  Order_BBI  |        700       |      280          |         1
------------------|-------------|------------------|-------------------|--------------------
        Item_02   |  Order_ZGO  |        375       |      120          |         1
        Item_02   |  Order_ADF  |        100       |       30          |         2
        Item_02   |  Order_SNE  |        900       |      620          |         3
        Item_02   |  Order_TLP  |        500       |      175          |         4
------------------|-------------|------------------|-------------------|---------------------
        Item_01   |  Order_OBD  |        500       |      380          |         1
        Item_01   |  Order_MTE  |        400       |      120          |         2
        Item_01   |  Order_XYZ  |        600       |      315          |         3 

在上面的结果中,我想创建一个{strong>降序列表,其中每个orderIDs的所有itemID
最新订单到由event_date定义的最旧订单
orderID在特定itemID中的位置应显示在列position中。


我尝试使用此查询,但无法使其正常工作:

SELECT
itemID,sum(order_volume),sum(shipped_volume),ROW_NUMBER() OVER (PARTITION BY orderID ORDER BY event_date DESC) as position
FROM operations
GROUP BY 1,2
ORDER BY itemID DESC,orderID DESC;

为了获得预期的结果,我需要更改什么?

解决方法

您要按项目而不是按项目进行分区(因为要对项目订单进行排名)。要进行排序,您需要event_date ...和一个汇总函数(因为每个组有两个不同的日期):我使用了MIN()

考虑:

SELECT
    itemID,orderID,SUM(order_volume) sum_ order_volume,SUM(shipped_volume) sum_ shipped_volume
    ROW_NUMBER() OVER (PARTITION BY itemID ORDER BY MIN(event_date) DESC) as position
FROM operations
GROUP BY 1,2
ORDER BY itemID DESC,position
,

您必须在partition by itemid窗口功能中order by MAX(event_date) DESCROW_NUMBER()

SELECT itemID,sum(order_volume) order_volume,sum(shipped_volume) shipped_volume,ROW_NUMBER() OVER (PARTITION BY itemID ORDER BY MAX(event_date) DESC) as position
FROM operations
GROUP BY itemID,orderID
ORDER BY itemID DESC,position;

请参见demo
结果:

> itemID  | orderID   | order_volume | shipped_volume | position
> :------ | :-------- | -----------: | -------------: | -------:
> Item_04 | Order_DXR |          260 |            110 |        1
> Item_03 | Order_BBI |          700 |            280 |        1
> Item_02 | Order_ZGO |          375 |            120 |        1
> Item_02 | Order_ADF |          100 |             30 |        2
> Item_02 | Order_SNE |          900 |            620 |        3
> Item_02 | Order_TLP |          500 |            175 |        4
> Item_01 | Order_OBD |          500 |            380 |        1
> Item_01 | Order_MTE |          400 |            120 |        2
> Item_01 | Order_XYZ |          600 |            315 |        3

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-