mysql - MySQL 8:如何从 FK 创建列?
问题描述
[上下文] 我需要在记录该机器状态更改的表中返回描述所有机器当前状态的行:
原始数据:
时间戳 | 机器编号 | fkDataType | 数据价值 |
---|---|---|---|
2021-02-17 23:28:28 | 1001 | 8 | 错误的 |
2021-02-17 23:28:28 | 1001 | 6 | 错误的 |
2021-02-17 23:28:28 | 1001 | 2 | O9009 |
2021-02-17 23:28:28 | 1001 | 5 | 1 |
2021-01-14 00:44:02 | 2001年 | 9 | 测试消息 |
数据类型:
ID | 数据类型名称 |
---|---|
1 | 模式 |
2 | 程序 |
3 | 零件计数 |
4 | 部分目标 |
5 | 托盘 |
6 | 有警报 |
7 | 报警内容 |
8 | 有消息 |
9 | 消息内容 |
目前,我有一个查询,可以获取每台机器的每种数据类型的最新数据,但我不知道如何将每种数据类型放在自己的列中。
WITH ranked AS (
SELECT t1.MachineName, fkNodeID as MachineID, DataValue, fkDataType as DataType, ROW_NUMBER()
OVER (PARTITION BY fkDataType, fkNodeID ORDER BY id DESC) AS Recency
FROM MachineData.Transactions
INNER JOIN (
SELECT MachineID, MachineName FROM MachineData.Machines
) t1 WHERE t1.MachineID = fkNodeID
)
SELECT * FROM ranked WHERE Recency = 1
ORDER BY MachineID, DataType
我的查询示例:
机器名称 | ID | 数据价值 | fkDataType | 新近度 |
---|---|---|---|---|
远州GE480H | 1001 | 记忆 | 1 | 1 |
远州GE480H | 1001 | O9009 | 2 | 1 |
远州GE480H | 1001 | 167 | 3 | 1 |
远州GE480H | 1001 | 200 | 4 | 1 |
远州GE480H | 1001 | 1 | 5 | 1 |
远州GE480H | 1001 | 错误的 | 6 | 1 |
远州GE480H | 1001 | “” | 7 | 1 |
远州GE480H | 1001 | 错误的 | 8 | 1 |
远州GE480H | 1001 | “” | 9 | 1 |
ESP32 | 2001年 | 测试消息 | 9 | 1 |
期望的输出:
机器名称 | ID | 模式 | 程序 | 零件计数 | ... |
---|---|---|---|---|---|
远州GE480H | 1001 | 记忆 | O9009 | 167 | ... |
ESP32 | 2001年 | 无效的 | 无效的 | 无效的 | ... |
我不知道如何做到这一点。任何帮助,将不胜感激。[MySQL 版本:8.0]
解决方案
推荐阅读
- android - 日本语中的 TextToSpeech
- python - 使用 VS Code 将多个 .py 文件行推送到 python 交互窗格
- ionic-framework - this.file.listDir 不会返回 Android 上 externalRootDirectory 下的文件夹
- android - 如何从 ListView setOnItemClickListener 获取项目值?
- sql - 如何使用正则表达式从字段中提取数字
- excel - 为 Excel 表中的列实现类似“标签”的过滤器?
- python - 如何将nii图像转换为2D图像?
- android - 运行时出现颤振错误:[ZeroHung]zrhung_get_config: Get config failed for wp[0x0102]
- ethers.js - 您可以将 ethers.js 与 Avalanche 网络、Polygon 网络和 Fantom Opera 一起使用吗?
- php - 删除延迟插件相关的样式表