如何在最大时间戳上正确执行组?
我正在使用MySQL 5.7.38
版本。 我有以下查询,该查询正在返回正确的示例数据,如下所示:
SELECT
t.r_id,
t.hostname,
t.a_tmstamp,
max(t.r_status) as r_status,
max(t.message) as message,
max(t.m_id) as m_id
FROM (
SELECT
audit.r_id as r_id,
nhost.host_name as hostname,
meta.r_status as r_status,
meta.step as step,
meta.id as m_id,
meta.message as message,
audit.a_timestamp as a_tmstamp,
npr.nas_provider as nas_provider
FROM audit
INNER JOIN npr ON npr.nr_id = audit.r_id
AND audit.a_timestamp BETWEEN now() - interval 30 DAY AND now()
INNER JOIN nhost ON audit.r_id = nhost.nr_id
INNER JOIN meta ON audit.audit_m_id = meta.id
INNER JOIN nprw ON npr.pw_id = nprw.id
AND nprw.ap_step = meta.step
WHERE meta.r_status regexp 'FAIL'
ORDER BY a_timestamp DESC
) AS t
GROUP BY t.r_id, t.hostname, t.a_tmstamp
ORDER BY a_tmstamp DESC;
示例数据:
+-----------+----------+-----------------------+--------------+------------+---------+
| r_id | hostname | a_tmstamp | r_status | message | m_id |
+-----------+----------------------------------+--------------+------------+---------+
| a1ffadc9 | abc01 | 6/9/2022 6:15:17 PM | PROGRESS | message1 | d759df3 |
| a1ffadc9 | abc02 | 6/9/2022 6:15:17 PM | PROGRESS | message2 | d759df3 |
| a1ffadc9 | abc01 | 6/9/2022 6:14:17 PM | PROGRESS | null | fdb2f19 |
| a1ffadc9 | abc02 | 6/9/2022 6:14:17 PM | PROGRESS | null | fdb2f19 |
| 246cc315 | cad01 | 6/9/2022 4:43:52 PM | FAILED | message3 | f5435f0 |
| 246cc315 | cad02 | 6/9/2022 4:43:52 PM | FAILED | message4 | f5435f0 |
| 258e55ac | cad01 | 6/9/2022 4:42:52 PM | FAILED | reason1 | 432ca62 |
| 258e55ac | cad02 | 6/9/2022 4:42:52 PM | FAILED | reason2 | 432ca62 |
+-----------+----------+-----------------------+--------------+------------+---------+
如何执行max(T.A_TMSTAMP)
的组进行组,以便我低于输出?
所需的输出:
+-----------+----------+-----------------------+--------------+------------+---------+
| r_id | hostname | a_tmstamp | r_status | message | m_id |
+-----------+----------------------------------+--------------+------------+---------+
| a1ffadc9 | abc01 | 6/9/2022 6:15:17 PM | PROGRESS | message1 | d759df3 |
| a1ffadc9 | abc02 | 6/9/2022 6:15:17 PM | PROGRESS | message2 | d759df3 |
| 246cc315 | cad01 | 6/9/2022 4:43:52 PM | FAILED | message3 | f5435f0 |
| 246cc315 | cad02 | 6/9/2022 4:43:52 PM | FAILED | message4 | f5435f0 |
+-----------+----------+-----------------------+--------------+------------+---------+
I am using MySQL 5.7.38
version.
I have the below query which is returning the correct sample data as below:
SELECT
t.r_id,
t.hostname,
t.a_tmstamp,
max(t.r_status) as r_status,
max(t.message) as message,
max(t.m_id) as m_id
FROM (
SELECT
audit.r_id as r_id,
nhost.host_name as hostname,
meta.r_status as r_status,
meta.step as step,
meta.id as m_id,
meta.message as message,
audit.a_timestamp as a_tmstamp,
npr.nas_provider as nas_provider
FROM audit
INNER JOIN npr ON npr.nr_id = audit.r_id
AND audit.a_timestamp BETWEEN now() - interval 30 DAY AND now()
INNER JOIN nhost ON audit.r_id = nhost.nr_id
INNER JOIN meta ON audit.audit_m_id = meta.id
INNER JOIN nprw ON npr.pw_id = nprw.id
AND nprw.ap_step = meta.step
WHERE meta.r_status regexp 'FAIL'
ORDER BY a_timestamp DESC
) AS t
GROUP BY t.r_id, t.hostname, t.a_tmstamp
ORDER BY a_tmstamp DESC;
Sample Data:
+-----------+----------+-----------------------+--------------+------------+---------+
| r_id | hostname | a_tmstamp | r_status | message | m_id |
+-----------+----------------------------------+--------------+------------+---------+
| a1ffadc9 | abc01 | 6/9/2022 6:15:17 PM | PROGRESS | message1 | d759df3 |
| a1ffadc9 | abc02 | 6/9/2022 6:15:17 PM | PROGRESS | message2 | d759df3 |
| a1ffadc9 | abc01 | 6/9/2022 6:14:17 PM | PROGRESS | null | fdb2f19 |
| a1ffadc9 | abc02 | 6/9/2022 6:14:17 PM | PROGRESS | null | fdb2f19 |
| 246cc315 | cad01 | 6/9/2022 4:43:52 PM | FAILED | message3 | f5435f0 |
| 246cc315 | cad02 | 6/9/2022 4:43:52 PM | FAILED | message4 | f5435f0 |
| 258e55ac | cad01 | 6/9/2022 4:42:52 PM | FAILED | reason1 | 432ca62 |
| 258e55ac | cad02 | 6/9/2022 4:42:52 PM | FAILED | reason2 | 432ca62 |
+-----------+----------+-----------------------+--------------+------------+---------+
How can I perform group by on max(t.a_tmstamp)
so that I get below output?
Desired Output:
+-----------+----------+-----------------------+--------------+------------+---------+
| r_id | hostname | a_tmstamp | r_status | message | m_id |
+-----------+----------------------------------+--------------+------------+---------+
| a1ffadc9 | abc01 | 6/9/2022 6:15:17 PM | PROGRESS | message1 | d759df3 |
| a1ffadc9 | abc02 | 6/9/2022 6:15:17 PM | PROGRESS | message2 | d759df3 |
| 246cc315 | cad01 | 6/9/2022 4:43:52 PM | FAILED | message3 | f5435f0 |
| 246cc315 | cad02 | 6/9/2022 4:43:52 PM | FAILED | message4 | f5435f0 |
+-----------+----------+-----------------------+--------------+------------+---------+
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以使用一些技巧来获取最新A_TMPSTAMP的状态/消息/M_ID:
You can employ some trickery to get the status/message/m_id for the latest a_tmpstamp: