› 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
killva4624
V2EX  ›  MySQL

请教如何在多个规律表名的表查询某个 id 最大值,并确认是哪个表

  •  
  •   killva4624 · Sep 9, 2022 · 2262 views
    This topic created in 1488 days ago, the information mentioned may be changed or developed.

    表说明

    • 表名:固定的前缀+%Y%m%d, 如 summary_20220809
    • 表结构:count BIGINT, id BIGINT

    查询单个表值示例

    select count from @table where id = @id;
    

    思路

    是否只能用循环日期+动态 sql 处理?

    伪代码如下:

    create PROCEDURE findMaxDay(id INT, mouth VARCHAR(255);)
    begin
    	-- 省略一些赋值
    
        WHILE x <= 31 DO
            set table_name = CONCAT('summary_',mouth, lpad(x,2,0));
            -- 查询单表结果并赋值
            set sql = CONCAT("select count INTO @tmp from '", table_name, "' where id = '", id,"'");
            PREPARE stmt FROM @sql;
            EXECUTE stmt;
            deallocate prepare stmt;
            -- 比较和更新结果
            set @day = IF( @tmp > @max, lpad(x,2,0), @day);
            set @max = max(tmp, max);
            set x = x + 1;
        END WHILE;
        -- 输出结果
        select day;
    end
    

    请大佬看看这样的思路对不对?有没有更好的方案。

    3 replies  •  2022-09-09 18:31:48 +08:00
    netnr
        1
    netnr  
       Sep 9, 2022 via Android
    还有种方式,用 union all ,需要添加一列表名,外面包一层取 max ,性能未知
    wxf666
        2
    wxf666  
       Sep 9, 2022
    好奇,有这个需求,为啥会这样分表。。
    akira
        3
    akira  
       Sep 9, 2022
    渲染出下面 sql ,然后直接执行就好了呗。 如果你过滤条件都走的索引的话,理论上应该还行

    select * from
    (select 'summary_20220809' , max(id) `max_id` from summary_20220809
    union all
    select 'summary_20220808' , max(id) `max_id` from summary_20220808
    union all
    select 'summary_20220807' , max(id) `max_id` from summary_20220807
    union all
    ...
    ) a
    order by `max_id` desc limit 1
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1320 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 16:32 · PVG 00:32 · LAX 09:32 · JFK 12:32
    ♥ Do have faith in what you're doing.