【问题标题】:Getting maximum values of columns with 'date/datetime' datatype from all tables of all databases从所有数据库的所有表中获取具有“日期/日期时间”数据类型的列的最大值
【发布时间】:2014-02-01 06:08:08
【问题描述】:

考虑一下——有很多数据库,每个数据库都有很多表。我提取了具有 'date/datetime' 数据类型的列以及 table name 和 schema name 。

 SELECT
    c.column_name AS col,
    column_type AS type,
    c.table_name AS tn,
    c.table_schema AS ts
FROM
    information_schema.columns AS c,
    (SELECT
        table_name, table_schema, table_rows AS tr
    FROM
        information_schema.TABLES
    ORDER BY table_schema) a
WHERE
    column_type LIKE 'date%'
        AND a.table_name = c.table_name
        AND a.table_schema = c.table_schema
;

我得到了这些列 = (column,column_type,table_name,table_Schema)。现在我想在结果中循环(或者任何其他方式都可以)并且对于每一行我想要这样做

SELECT max(column) FROM table_schema.table_name 

比如第一行是(login_date,date,login,customers),我想做

SELECT max(login_date) FROM customers.login 

我想对每一行都这样做。任何帮助将不胜感激。

【问题讨论】:

  • 看看存储过程、临时表和游标。
  • 您是否想知道表格的最后更新时间?在这种情况下,这样的事情应该可以解决问题:SELECT UPDATE_TIME FROM information_schema.tables WHERE TABLE_SCHEMA = 'dbname' AND TABLE_NAME = 'tabname'
  • 不,我不想知道上次更新表格的时间。这是一个非常抽象的问题,是我想做的事情的一小部分。我只想找到日期/日期时间数据类型的每一列的最大值。

标签: mysql sql database database-schema information-schema


【解决方案1】:

你可以试试这样的:

 cursor csr 
    is select max(dates)
    from tables
    and dates is not null; rec csr%rowtype;

    begin 
    open csr; 
    for x in cursor_body 
    loop
    fetch csr into rec;
    exit when csr%notfound;
    x.csr;
    end loop;
    close csr;

如果你不想创建一个完整的过程,你将不得不至少使用一个声明块。选择光标中的值,然后在开始后在处理阶段循环光标。

希望对你有帮助

【讨论】:

  • 是否可以不使用存储过程/游标?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 2023-02-11
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 2022-01-28
相关资源
最近更新 更多