mysql - 如何按时间顺序从两个或多个表中进行选择?

标签 mysql select

我试图从两个大日志表中一起选择,并获得所有事件的时间顺序结果。

假设我有:

Table: MyDb.Building_A
+---------------------+--------------+
| DateTime            | Employee     | (some other columns)
+---------------------+--------------+
| 2019-01-01 08:00:00 | Bob          |
(... millions more rows)

And then another table: MyDb.Building_B
+---------------------+--------------+
| DateTime            | Employee     | (some other columns)
+---------------------+--------------+
| 2019-01-01 08:10:00 | Bob          |
| 2019-01-01 08:20:00 | Peter        |
(... many millions more rows)

现在我的老板想查看一段时间内所有建筑物的所有访问日志(分页数据):

我需要将数据像 zipper 一样组合在一起:

+---------------------+--------------+
| 2019-01-01 08:00:00 | Bob          |
| 2019-01-01 08:10:00 | Bob          |
| 2019-01-01 08:20:00 | Peter        |

我能想到的最好办法是从两个表中单独选择一个数组(按日期时间排序),使用两组数据对数组进行排序(使用多维数组排序),然后将数组修剪为单个数组页的数据量。 (一想到这个我就累了!)

这里效率很低...有更好的方法吗? (使用MySQL)

最佳答案

您可以只使用 UNION 查询(在本例中,获取今年的所有访问):

(SELECT `DateTime`, Employee 
 FROM MyDb.Building_A
 WHERE `DateTime` BETWEEN '2019-01-01' AND '2019-12-31')
UNION
(SELECT `DateTime`, Employee 
 FROM MyDb.Building_B
 WHERE `DateTime` BETWEEN '2019-01-01' AND '2019-12-31')
ORDER BY `DateTime`

UNION 将从每个表中获取满足 DateTime 标准的所有行,ORDER BY 将对所有行进行排序DateTime,根据需要混合构建 A 和 B。

注意我假设您的 DateTime 列是 MySQL DateDateTime 数据类型。如果不是,您可能需要使用 STR_TO_DATE 进行转换,以使 BETWEEN 逻辑正常工作。

关于mysql - 如何按时间顺序从两个或多个表中进行选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55920667/

相关文章:

mysql - 使用 LIMIT 时,在 MySQL 中使用 UNION ALL 获取单个 SELECT 语句的结果行数

MySQL INSERT INTO ... SELECT ... GROUP BY 太慢

MySQL 错误 1215 : Cannot add foreign key constraint, innodb,新表

mysql - Hibernate JPA不支持@TableGenerator的 "initialValue"元素吗?

使用 ORDER by 的 MySQL 性能问题

Mysql:选择任意年份 1 月 22 日至 2 月 3 日之间的时间戳

SQL 选择来自同一列的多个计数

mysql - 带有 Group By 子句的条件聚合

php - 如何通过 PHP 处理 SELECT 1 的结果?

php - 插入具有运行余额的行