请教一个极值差值且最小值需在最大值创建时间前的问题

2021-07-03 14:58:49 +08:00
 Te11UA

基于 Mysql 5.7 ,想要做的效果是查看商品上升排名最多的商品

表结构如下,每 10 分钟打点一次,记录商品排名:

create table product_info
(
    prodcut_name          varchar(16)                        null comment '商品名',
    total_index   smallint                           null comment '总排名',
    create_time   datetime default CURRENT_TIMESTAMP not null comment '创建时间'
);

本来想用

SELECT prodcut_name, max(total_index) - min(total_index) AS index_diff
FROM product_info
WHERE create_time > '2021-07-01 00:00:00'
GROUP BY prodcut_name
ORDER BY index_diff DESC
limit 10;

但是发现这个只是考虑了差值,没有考虑到最大值的时间必须在最小值的时间前,这样写会下降排名最多的也会显示。这下 SQL 语句不会写了,思来想去只能分个语句写,想请问下有没有可写在一条的语句呢?

1156 次点击
所在节点    MySQL
1 条回复
isofew
2021-07-04 01:30:34 +08:00
不做 group,商品自己和自己 join,条件是商品名一致且一个时间在另一个前,然后按排名差

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/787298

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX