mysql - 如何简化这个sql
问题描述
我的 sql 表达式有问题,我想在主选择中放置不同的列,这些不同的列具有相同的 where 子句。
这是我的 sql 示例:
SELECT t.*,
(SELECT monitor_value
FROM sub_message s
WHERE s.project_name=t.project_name
ORDER BY monitor_time ASC
LIMIT 1) AS project_start_val,
(SELECT monitor_time
FROM sub_message s
WHERE s.project_name=t.project_name
ORDER BY monitor_time ASC
LIMIT 1) AS project_start_time
FROM sub_message t
解决方案
以下应该有效(未经测试):
select t.*,
s2.monitor_value project_start_val,
s2.monitor_time project_start_time
from sub_message t
LEFT JOIN (select project_name pn, min(monitor_time) pt from sub_message group by project_name) s1 ON pn=t.project_name
LEFT JOIN sub_message s2 ON s2.project_name=s1.pn and s2.monitor_time=s1.pt
您仍然需要两次,并且只有 在 table 中的列是唯一的时LEFT JOIN
它才会可靠地工作。但是,如果满足此条件,它为您提供了在查询中包含更多列的机会,而无需添加另一个子查询。project_name,monitor_time
sub_message
s2
推荐阅读
- javascript - 如何在使用 ws npm 模块的 javascript 中使用 ws.send() 时发送 EOF
- python - 转换 .bat 文件以打开和加载 putty 会话到 Python
- php - Mailgun API - 发送多个附件
- sql-server - SQL Server 自动启动例程
- python - Windows SSL 证书存储和 Python LDAP
- java - 我应该在 OnBindViewHolder() 方法中设置 ReyclerView 的 Item 的 OnClickListener 吗?
- c# - ASP.NET Firebase 验证令牌 ID
- java - Android [LocationManager] requestLocationUpdates(), java.lang.RuntimeException
- swift - 为什么我的 Image CIPerspectiveCorrection 在每台设备上都不同?
- node.js - 如果我在节点服务器中将超时值设置为 0,是否会对性能产生影响?