我会尝试将两个时间分辨率不同的表格合并到它们最近的日期。
这些表格如下:
表格1:
id | date | device | value1
----------------------------------
1 | 10:22 | 13 | 0.53
2 | 10:24 | 13 | 0.67
3 | 10:25 | 14 | 0.83
4 | 10:25 | 13 | 0.32
表2:
id | date | device | value2
----------------------------------
22 | 10:18 | 13 | 0.77
23 | 10:21 | 14 | 0.53
24 | 10:23 | 13 | 0.67
25 | 10:28 | 14 | 0.83
26 | 10:31 | 13 | 0.23
我希望将这些表格与第一个表格合并。因此,我想将value2添加到Table1中,其中对于每个设备,最新的value2出现。
结果:
id | date | device | value1 | value2
-------------------------------------------
1 | 10:22 | 13 | 0.53 | 0.77
2 | 10:24 | 13 | 0.67 | 0.67
3 | 10:25 | 14 | 0.83 | 0.53
4 | 10:25 | 13 | 0.32 | 0.67
我有大约20-30个设备,Table2中有数千行数据(=m),Table1中有数百万条数据(=n)。
我可以按日期对所有表进行排序(O(n*logn)),将它们写入文本文件,像合并一样遍历Table1,同时从Table2中拉取数据,直到数据更新为止(我需要管理每个设备的约20-30个指向最新数据的指针,但不超过这个范围)。在合并后,我可以将其重新上传到数据库。然后复杂度是O(n * log(n))用于排序和O(n+m)用于遍历表格。
但是最好还是在数据库中完成。但是我能够实现的最佳查询的复杂度为O(n^2):
SELECT DISTINCT ON (Table1.id)
Table1.id, Table1.date, Table1.device, Table1.value1, Table2.value2
FROM Table1, Table2
WHERE Table1.date > Table2.date and Table1.device = Table2.device
ORDER BY Table1.id, Table1.date-Table2.date;
我需要处理的数据量非常大,这个方法很慢,有更好的方法吗?或者只能使用已下载的数据进行处理?