mysql – SQL从两个带内连接和限制的表中选择
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql – SQL从两个带内连接和限制的表中选择,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1613字,纯文字阅读大概需要3分钟。
内容图文
![mysql – SQL从两个带内连接和限制的表中选择](/upload/InfoBanner/zyjiaocheng/904/90ea235b986b404982dbe46fe866e2d0.jpg)
参见英文答案 > Retrieving the last record in each group – MySQL 22个
我有两个表服务和状态.服务表仅包含名称和ID
| id | name |
|----|-------|
| 1 | Test1 |
| 2 | Test2 |
和像这样的状态表
| id | status | service_id | timestamp |
|----|--------|------------|---------------------------|
| 1 | OK | 1 | October, 15 2015 09:03:07 |
| 2 | OK | 1 | October, 15 2015 09:08:07 |
| 3 | OK | 2 | October, 15 2015 10:05:23 |
| 4 | OK | 2 | October, 15 2015 10:15:23 |
我想得到这样的数据
| id | name | status | timestamp |
|----|-------|--------|---------------------------|
| 1 | Test1 | OK | October, 15 2015 09:08:07 |
| 2 | Test2 | OK | October, 15 2015 10:15:23 |
服务数据的最新状态.我试过这个说法
SELECT ser.id, ser.name, a.status, a.timestamp
from Service ser
inner join (select * from status
order by Status.timestamp
DESC limit 1) as a
on a.service_id = ser.id
但我只能得到
| id | name | status | timestamp |
|----|-------|--------|---------------------------|
| 2 | Test2 | OK | October, 15 2015 10:15:23 |
如何更改语句以获得我想要的内容?
用于测试SQL Fiddle
解决方法:
你可以这样做:
SELECT
ser.id,
ser.name,
s.status,
s.timestamp
FROM Service ser
INNER JOIN status as s ON s.service_id = ser.id
INNER JOIN
(
SELECT
service_id,
MAX(timestamp) AS MaxDate
FROM status
GROUP BY service_id
) AS a ON a.service_id = s.service_id
AND a.MaxDate = s.timestamp;
与子查询的连接:
SELECT
service_id,
MAX(timestamp) AS MaxDate
FROM status
GROUP BY service_id
将消除除最新日期之外的所有状态.
内容总结
以上是互联网集市为您收集整理的mysql – SQL从两个带内连接和限制的表中选择全部内容,希望文章能够帮你解决mysql – SQL从两个带内连接和限制的表中选择所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。