V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
Te11UA
V2EX  ›  MySQL

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

  •  
  •   Te11UA · 2021-07-03 14:58:49 +08:00 · 1025 次点击
    这是一个创建于 1026 天前的主题,其中的信息可能已经有所发展或是发生改变。

    基于 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 语句不会写了,思来想去只能分个语句写,想请问下有没有可写在一条的语句呢?

    1 条回复    2021-07-04 01:30:34 +08:00
    isofew
        1
    isofew  
       2021-07-04 01:30:34 +08:00 via Android
    不做 group,商品自己和自己 join,条件是商品名一致且一个时间在另一个前,然后按排名差
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   4874 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:58 · PVG 11:58 · LAX 20:58 · JFK 23:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.