mysql - 如何按时间顺序从两个或多个表中进行选择?
问题描述
我正在尝试从两个大日志表中进行选择,并按时间顺序排列所有活动的结果。
假设我有:
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)
现在我的老板想查看一段时间内所有建筑物的所有访问日志(分页数据):
我有点需要数据像拉链一样组合在一起:
+---------------------+--------------+
| 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
列是 MySQLDate
或DateTime
数据类型。如果不是,您可能需要使用STR_TO_DATE
它来转换它以使BETWEEN
逻辑工作。
推荐阅读
- javascript - pendingItem.callback 不是函数吗?
- reactjs - 视频聊天窗口不显示 /reactjs 与 twillio
- mongodb - 如何设计 mongo db 模型并使用不同的集合进行查询?
- python - 如何在包含目录的for循环目录中使用tqdm获取进度条?
- java - 淡化 JLabels 的方法?
- elasticsearch - 从 HDFS 到 ES 的数据加载需要很长时间
- python - 将 subprocess.run 与包含引号的参数一起使用
- android - 谷歌地图自定义图块在 Android P 中不起作用
- javascript - 在firebase onCall云函数上使用异步/等待中的try/catch进行错误处理
- c - 当我尝试从我的二进制文件中读取它时,我的数组没有出现在我的文本文件中