describe serverLog; +----------6ren">
gpt4 book ai didi

sql - 在mysql中选择多个 "most recent by timestamp"

转载 作者:行者123 更新时间:2023-11-29 07:15:05 25 4
gpt4 key购买 nike

我有一个表,其中包含各种服务器的日志条目。我需要为每个 idServer 创建一个包含最新(按时间)日志条目的 View 。

mysql> describe serverLog;
+----------+-----------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-----------+------+-----+-------------------+----------------+
| idLog | int(11) | NO | PRI | NULL | auto_increment |
| idServer | int(11) | NO | MUL | NULL | |
| time | timestamp | NO | | CURRENT_TIMESTAMP | |
| text | text | NO | | NULL | |
+----------+-----------+------+-----+-------------------+----------------+

mysql> select * from serverLog;
+-------+----------+---------------------+------------+
| idLog | idServer | time | text |
+-------+----------+---------------------+------------+
| 1 | 1 | 2009-12-01 15:50:27 | log line 2 |
| 2 | 1 | 2009-12-01 15:50:32 | log line 1 |
| 3 | 3 | 2009-12-01 15:51:43 | log line 3 |
| 4 | 1 | 2009-12-01 10:20:30 | log line 0 |
+-------+----------+---------------------+------------+

让这件事(对我来说)困难的是:

  • 较早日期/时间的条目可能会稍后插入,所以我不能只依赖 idLog。
  • 时间戳不是唯一的,所以我需要使用 idLog 作为“最新”的决胜局。

我可以使用子查询获得我想要的结果,但我不能将子查询放入 View 中。另外,我听说 MySQL 的子查询性能很差。

mysql> SELECT * FROM (
SELECT * FROM serverLog ORDER BY time DESC, idLog DESC
) q GROUP BY idServer;
+-------+----------+---------------------+------------+
| idLog | idServer | time | text |
+-------+----------+---------------------+------------+
| 2 | 1 | 2009-12-01 15:50:32 | log line 1 |
| 3 | 3 | 2009-12-01 15:51:43 | log line 3 |
+-------+----------+---------------------+------------+

我的观点的正确写法是什么?

最佳答案

我推荐使用:

CREATE OR REPLACE VIEW vw_your_view AS
SELECT t.*
FROM SERVERLOG t
JOIN (SELECT sl.idserver,
MAX(sl.time) 'max_time'
FROM SERVERLOG sl
GROUP BY sl.idserver) x ON x.idserver = t.idserver
AND x.max_time = t.time

永远不要在 View 中定义 ORDER BY,因为不能保证每次使用 View 时都需要您指定的顺序。

关于sql - 在mysql中选择多个 "most recent by timestamp",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1829376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com