Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >来自多个表的多个表连接和最新时间戳

来自多个表的多个表连接和最新时间戳
EN

Stack Overflow用户
提问于 2019-08-05 23:02:41
回答 1查看 354关注 0票数 0

我尝试将多个字段聚合到一个查询buy中,获取相关历史表中每个项目的最新时钟/时间戳值。这是用于墙壁仪表板显示的,内置的函数不足以获得干净整洁的输出,但它确实支持sql查询。

基于前面的问题(MySql Combine two queries (subselect or join or union)),我创建了以下内容,尽管它是功能性的,但数据是不正确的。我需要从时钟列中提取每一项的最后一个值。一旦我们将表分区和其他项放在一起,就会有第三个表需要添加,这只是一个最小的示例。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT hosts.host,
max(case when items.name='DB2 CPU Usage' then history.value end) as ' DB2 CPU Usage',
max(case when items.name='DB2 Cache Hit Rate' then history.value end) as ' DB2 Cache Hit Rate',
max(case when items.name='DB2 Percent Rqst Waiting' then history.value end) as ' DB2 Percent Rqst Waiting',
max(case when items.name='DB2 Version' then history_text.value end) as ' DB2 Version'
from hosts
left join  items on items.hostid = hosts.hostid
left join  history on history.itemid = items.itemid
left join  history_text on history_text.itemid = items.itemid
where items.name like 'DB2%'
group by hosts.host, items.name, history.value

我已经尝试了一些这样的示例(Join tables and return row with latest timestampRetrieve latest timestamp row from table using INNER JOIN),但是无法使用所有的表进行有效的查询。

这可以很好地工作,但是我不知道如何组合select itemid,max(clock) as max_clock from history group by history.itemid order by max_clock desc limit 1

以下是一些示例数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
hosts
+-----------+-------+
|host       |hostid |
+-----------+-------+
|server01   |10001  |
|server02   |10002  |
+-----------+-------+

items
+-------+-------+-------------------+
|itemid |hostid |name               |
+-------+-------+-------------------+
|9801   |10001  |DB2 CPU Usage      |
|9936   |10001  |DB2 Cache Hit Rate |
|9783   |10001  |DB2 Version        |
|9802   |10002  |DB2 CPU Usage      |
|9937   |10002  |DB2 Cache Hit Rate |
|9784   |10002  |DB2 Version        |
+-------+-------+-------------------+

history
+-------+-------+-----------+
|itemid |value  |clock      |
+-------+-------+-----------+
|9801   |86     |1565042153 |
|9801   |32     |1565042253 |
|9936   |12     |1565042120 |
|9936   |22     |1565042220 |
|9802   |41     |1565042153 |
|9802   |72     |1565042253 |
|9937   |99     |1565042120 |
|9937   |53     |1565042220 |
+-------+-------+-----------+

history_text
+-------+-------+-----------+
|itemid |value  |clock      |   
|9783   |9.7    |1565042120 |
|9783   |9.7    |1565042320 |
|9784   |10.5   |1565042123 |
|9784   |10.5   |1565042324 |
+-------+-------+-----------+

和所需的输出

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+-----------+---------------+-------------------+---------------+
|           |DB2 CPU Usage  |DB2 Cache Hit Rate |DB2 Version    |
+-----------+---------------+-------------------+---------------+
|server01   |32             |22                 |9.7            |
|server02   |72             |53                 |10.5           |
+-----------+---------------+-------------------+---------------+

从我学到的每一件事中,我已经适应了不同的问题-谢谢你的时间,非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2019-08-06 18:58:44

如果您有两个历史表,其中一个包含第一个值,第二个包含后面的第二个值,那么您的数据库设计会更适合这一点。首先,这是数据的create版本,因此您可以使用dbfidddle或sqlfiddle快速尝试

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE TABLE hosts
  (`host` varchar(8), `hostid` int)
;

INSERT INTO hosts
  (`host`, `hostid`)
VALUES
  ('server01', 10001),
  ('server02', 10002)
;


CREATE TABLE items
 (`itemid` int, `hostid` int, `name` varchar(18))
;

INSERT INTO items
  (`itemid`, `hostid`, `name`)
VALUES
  (9801, 10001, 'DB2 CPU Usage'),
  (9936, 10001, 'DB2 Cache Hit Rate'),
  (9783, 10001, 'DB2 Version'),
  (9802, 10002, 'DB2 CPU Usage'),
  (9937, 10002, 'DB2 Cache Hit Rate'),
  (9784, 10002, 'DB2 Version')
;


CREATE TABLE history
  (`itemid` int, `value` DECIMAL(5,1) , `clock` int)
;

INSERT INTO history
  (`itemid`, `value`, `clock`)
VALUES
  (9801, 86, 1565042153),
  (9801, 32, 1565042253),
  (9936, 12, 1565042120),
  (9936, 22, 1565042220),
  (9802, 41, 1565042153),
  (9802, 72, 1565042253),
  (9937, 99, 1565042120),
  (9937, 53, 1565042220)
;


CREATE TABLE history_text
  (`itemid` int, `value` DECIMAL(5,1) , `clock` int)
;

INSERT INTO history_text
  (`itemid`, `value`, `clock`)
VALUES
  (9783, 9.7, 1565042120),
  (9783, 9.7, 1565042320),
  (9784, 10.5, 1565042123),
  (9784, 10.5, 1565042324)
;

这是我对你的问题的解决方案

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT 
  host,
  MAX(IF(name = 'DB2 CPU Usage',value,NULL)) 'DB2 CPU Usage',
  MAX(IF(name = 'DB2 Cache Hit Rate',value,NULL)) 'DB2 Cache Hit Rate',
  MAX(IF(name = 'DB2 Version',value,NULL)) 'DB2 Version'
FROM
(
  SELECT i.itemid itemid, h.hostid hostid, name, value, h.host host FROM
   (
     SELECT MAX(value) value,h.itemid itemid FROM history h 
       INNER JOIN 
       (SELECT MAX(clock) clock,itemid FROM history 
       GROUP BY itemid
       ) hi 
      ON h.clock = hi.clock GROUP BY h.itemid
    UNION
    SELECT MAX(value) value,h.itemid itemid FROM history_text h 
      INNER JOIN 
      (SELECT MAX(clock) clock,itemid FROM history_text 
       GROUP BY itemid
      ) hi 
      ON h.clock = hi.clock GROUP BY h.itemid
   ) his 
   inner join items i on i.itemid =  his.itemid 
   inner join hosts h on h.hostid = i.hostid
) res GROUP BY host;

结果是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
host    DB2 CPU Usage   DB2 Cache Hit Rate  DB2 Version
server01   32.0             22.0                9.7
server02   72.0             53.0               10.5

正如您所看到的,我从历史和历史文本开始。我找不到比这更漂亮的形式了。这并不复杂,您首先选择按itemid分组的最大日期,然后将其与同一个表连接。这样您就可以为每个itemid指定正确的值。然后我对历史文本做了同样的处理。把所有的东西结合起来,这样我们就有了所有需要的itemid。剩下的就是内联其余的桌子了。并最终使结果

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57366997

复制
相关文章
mysql单个表拆分成多个表
一.横向拆分 create table 新表的名称 select * from 被拆分的表 order by id limit int1,int2 int1为其实位置,int2为几条 注意:这样拆分后主键会失效手动让其主键生效即可所有要执行 alter table 新表的名称 modify 主键字段 int primary key auto_increment 二.纵向拆分 create table 新表的名称 select 需保留的字段 from 被拆分的表 拆分后原表都要保存 主要是把经常查的数据
小小咸鱼YwY
2020/06/19
3.8K0
VBA技巧:复制多个工作表
有时候,我们想要批量复制多个工作表到新的工作簿,可以使用VBA代码来实现。例如,工作簿中有三个工作表,其名称分别为:Data、完美Excel和Output,要将这三个工作表一次复制到一个新的工作簿中并保存,示例代码如下:
fanjy
2022/11/16
2.5K0
EF基础知识小记七(拆分实体到多个表以及拆分表到多个实体)
一、拆分实体到多个表 1、在日常开发中,会经常碰到一些老系统,当客户提出一些新的需求,这些需求需要在原来的表的基础上加一些字段,大多数人会选择通过给原表添加字段的方式来完成这些需求,方法,虽然可行,但是如果架构不合理的系统,就会牵一发而动全身.所以处理这种需求比较合理的方式是:建一张新表来存放新的字段. 通过叫做合并两张及以上的表到一个单独的实体,也叫分拆一个实体到多个表,我们把每个组成部分当成一个逻辑实体.这个过程叫做逻辑分拆. 缺点:每当获取实体时,框架都需要额外的Join联结. 2、示例 下面通过一个
郑小超.
2018/01/26
1.3K0
PostgreSQL - update语句怎么关联多个表
对于select语句,我们可以通过join/outer join来关联多个表;但是对于update语句,是不能直接通过join/outer join来关联多表数据的,这里仅针对PostgreSQL。
雨临Lewis
2022/01/11
5.3K0
将一个工作表拆分为多个工作表
最近已经不止一次被人问到:怎么将一个工作表拆分为多个工作表?一般这样的需求,是因为将1-12月的数据写在了一个工作表上,而现在又想将它拆分为12个单独的工作表,每个工作表单独一个月份.总结了一下,文艺
但老师
2022/03/22
4.4K0
将一个工作表拆分为多个工作表
Tidyverse| XX_join :多个数据表(文件)之间的各种连接
前面分享了单个文件中的select列,filter行,列拆分等,实际中经常是多个数据表,综合使用才能回答你所感兴趣的问题。
生信补给站
2020/08/05
1.6K0
Tidyverse| XX_join :多个数据表(文件)之间的各种连接
WinDBG 使用多个路径下的符号表
在开发调试问题的过程中,我们经常使用 WinDBG 来调试崩溃、卡死或蓝屏的 Dump 文件,调试时我们需要将微软的符号表路径导入到 WinDBG 中,也需要将自己程序的符号表文件导入到 WinDBG 中,这样看 Dump 才一清二楚。导入多个符号表的方法就是在每个符号表路径后增加一个分号 ; 然后紧接着下一个符号表路径。
我与梦想有个约会
2023/10/21
2670
WinDBG 使用多个路径下的符号表
使用Python pandas读取多个Excel工作表
本文将尝试使用Python pandas读取来自同一文件的多个Excel工作表。我们可以通过两种方式来实现这一点:使用pd.read_excel()方法,并使用可选的参数sheet_name;另一种方法是创建一个pd.ExcelFile对象,然后解析该对象中的数据。
fanjy
2021/11/10
13.4K0
使用Python pandas读取多个Excel工作表
Oracle查询优化-03操作多个表
要将来自多个表的数据组织到一起,就像将一个结果集叠加到另外一个上面一样。 这些表不必有相同的关键字,但是他们对应列的数据类型必须相同。
小小工匠
2021/08/16
3.2K0
Excel应用实践15:合并多个工作表
有时候,我们需要将工作簿中的所有工作表的数据合并到一个工作表中。如果工作表数量很少,可以直接手工使用复制粘贴操作,然而,如果工作表很多并且工作表中的数据量很大,手工复制既繁琐又容易出错漏。
fanjy
2019/07/19
1.1K0
Spring Security 可以同时对接多个用户表?
其实只要看懂了松哥前面的文章,这个需求是可以做出来的。因为一个核心点就是 ProviderManager,搞懂了这个,其他的就很容易了。
江南一点雨
2020/07/16
3.4K1
[Python运维]自动化监控多个Oracle表空间
这个专题讲解Python相关方面的内容,首先是运维方面,例如数据库,Linux等,后续会有Web,爬虫等。
bsbforever
2020/08/19
6790
DataTalk:是一个宽表好还是多个维表好?
0x00 前言 本篇的主题是关于数据模型的规范化和反规范化的讨论,其实也是一种常见的维度建模的设计和业务使用便捷性的冲突。 0x01 讨论 问题: 在设计数据表的时候,是一个宽表好,还是多个维度表好? 回答一: 数据仓库每张表的搭建,主要依赖于这个表在整个数据仓库中的作用和相关意义。首先要清楚这个表的存在是为了解决那些问题,什么角色使用,怎么保证使用者尽可能好的体验解决问题。从以上所提到的角度去看待问题,拆解以下几点因素: 拆表情况下多张数据表的查询SQL的编写难度有多大,是否会出现为了数据提取需要关联多张
木东居士
2018/05/25
5.6K0
VBA实例01:复制多个Excel表到Word
有些时候,需要将多个Excel表复制到Word文档中指定的位置。一般可以使用通常的复制/粘贴操作,然而如果表很多的话,VBA就派上用场了。
fanjy
2020/11/24
4.6K0
VBA实例01:复制多个Excel表到Word
【MySql】表的内连接和外连接
内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。
平凡的人1
2023/10/15
2960
【MySql】表的内连接和外连接
VBA创建多个数据源的数据透视表
比如要分析工资的数据,工资表是按月分了不同Sheet管理的,现在需要把12个月的数据放到一起创建1个数据透视表。
xyj
2020/07/28
3.4K0
VBA创建多个数据源的数据透视表
连表查询的介绍_连接表
大家好,又见面了,我是你们的朋友全栈君。 1、连表查询的原因 (1)如果查询结果不在一个表中,在多个表中,那就需要将表关联,进行连表查询。 (2)连表查询大多数都作用在外键得基础上。—表与表之间有关
全栈程序员站长
2022/10/05
3.1K0
连表查询的介绍_连接表
【说站】Python如何对多个sheet表进行整合?
1、xlwt模块是非追加写入.xls模块,所以要一次性写入for循环和列表,这样就没有追加和非追加的说法。
很酷的站长
2022/11/24
1K0
【说站】Python如何对多个sheet表进行整合?
常用功能加载宏——多个工作表合并到一个工作表
把数据复制到一个工作簿后,一般我们还需要进行数据处理,而数据处理要在一个工作表才方便,所以把多个工作表的数据复制到一个工作表再进行数据处理也会经常碰到:
xyj
2020/07/28
1.7K0
常用功能加载宏——多个工作表合并到一个工作表
Mongodb WiredTiger 时间戳 来自wiredtiger 内部的声音
偶然看到Wiredtiger团队总监Michael Cahill,关于timestamp的一段视频,写成文字和大家share,如有错误,请及时指正。Michael Cahill在2011年与另一个合伙人共同开发了wiredtiger。
AustinDatabases
2020/03/10
8180
Mongodb   WiredTiger 时间戳  来自wiredtiger  内部的声音

相似问题

在多个表中查找最新时间戳

20

PostgreSQL动态查询:查找多个无关表的最新时间戳

15

来自多个表和多个连接的MYSQL

11

使用最新记录连接多个表

22

获取连接多个表的最新ModifiedDate

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文