【发布时间】:2013-04-05 01:27:58
【问题描述】:
我有数百万行的表,需要获取特定 ID 的最后一行
例如最后一行 device_id = 123 和最后一行 device_id = 1234
因为表格太大了,排序需要很长时间,是否可以选择最后 200 个而不对表格进行排序,然后只订购这 200 个并获取我需要的行。
我该怎么做?
提前感谢您的帮助!
更新
我的 PostgreSQL 版本是 9.2.1
样本数据:
time device_id data data ....
"2013-03-23 03:58:00-04" | "001EC60018E36" | 66819.59 | 4.203
"2013-03-23 03:59:00-04" | "001EC60018E37" | 64277.22 | 4.234
"2013-03-23 03:59:00-04" | "001EC60018E23" | 46841.75 | 2.141
"2013-03-23 04:00:00-04" | "001EC60018E21" | 69697.38 | 4.906
"2013-03-23 04:00:00-04" | "001EC600192524"| 69452.69 | 2.844
"2013-03-23 04:01:00-04" | "001EC60018E21" | 69697.47 | 5.156
....
所以如果 device_id = 001EC60018E21 我想要具有该 device_id 的最新行。 具有该 device_id 的最后一行是我想要的行是受让人,但它可能是也可能不是表的最后一行。
【问题讨论】:
-
最后 200 行保证有最后一行 id = 123 和 id = 1234
-
如果您知道 ID,为什么还要费心获取整个表?战略性放置的 RDBMS 索引可以很好地解决问题。
-
最好显示您的 PostgreSQL 版本、示例数据和预期结果,这样我们就不必为您创建测试用例了。
-
在我的示例中的 id 不是行 id,它们是特定数据分组的 id。很抱歉造成混乱
-
您是否尝试过在 DATE 字段上创建逆序索引?这应该加快你的'ORDER BY date DESC'子句。然后你可以使用 SELECT 和 LIMIT。
标签: sql postgresql