MySQL 连接两个表,其中日期介于两个日期之间


MySQL join two tables where date between two dates

我有一个包含 6 列的表:id (PK, A_I), systemID (varchar(32)), total (varchar(32)), difference (varchar(16)), update(datetime), error (int).该表每小时更新一次,现在有超过 200 万条记录。因此,我想将表拆分为一个仅包含今天值的表和一个包含历史数据的表。每天午夜,今天表中的数据都会移动到历史数据。目前为止,一切都好。

问题是用户可以选择在日视图、周视图、月视图和年视图中查看差异值。我不知道如何将今天表与历史表连接起来,所以它们作为一个整体。目前,周视图的查询是:

SELECT difference FROM productionlog 
WHERE systemID = '$id'
AND DATE(updated) BETWEEN '$weekStart' AND '$weekEnd'
ORDER BY updated

如何将今天表与历史表连接并实现上述结果?

试试这个查询,

SELECT difference FROM productionlog WHERE systemID = '$id' AND DATE(updated) BETWEEN '$weekStart' AND '$weekEnd'
UNION ALL
SELECT difference FROM productionlog_today WHERE systemID = '$id' AND DATE(updated) BETWEEN '$weekStart' AND '$weekEnd' ORDER BY updated

另请阅读联盟

如上所述,您已经完成了一个联合,并且您的单独查询按自己的顺序返回其结果。您可以将整个查询放在括号中,然后对总体结果进行排序:

SELECT * FROM (
    (SELECT difference, updated FROM productionlog WHERE systemID = '$id' AND DATE(updated) BETWEEN '$weekStart' AND '$weekEnd')
UNION ALL
    (SELECT difference, updated FROM productionlog_today WHERE systemID = '$id' AND DATE(updated) BETWEEN '$weekStart' AND '$weekEnd' ORDER BY updated)
) as result
ORDER BY result.updated