这个sql算法有更好的性能吗?

问题描述:

我正在寻找替代SQL代码这个sql算法有更好的性能吗?

我的表有4列:Id, Zip code, timestamp and user value.

行范例:2299898;"40";"2011-03-28 00:45:00+02";1.9

我想要得到的结果为一天为每个邮政编码的时间等于或在时间戳之前。显然,每条线的用户数据。

我到目前为止查询:

SELECT DISTINCT 
    FIRST_VALUE(timestamp) OVER (
     PARTITION BY zipcode, DATE(timestamp) 
     ORDER BY timestamp DESC 
    ) AS timestamp, 
    zipcode, 
    FIRST_VALUE(userdata) OVER (
     PARTITION BY zipcode, DATE(timestamp) 
     ORDER BY timestamp DESC 
    ) AS userdata 
+0

标签您正在使用的数据库管理系统。性能问题几乎总是产品特定的。 – jarlh

+0

您好jarlh,它是postgres 9.1, –

+0

您遇到的性能问题是什么?执行时间比预期的要长吗?您是否使用过'EXPLAIN'来生成执行计划? –

你不需要的窗函数:

select distinct on (zipcode, timestamp::date) 
    timestamp, 
    zipcode, 
    userdata 
from t 
order by zipcode, timestamp::date desc, timestamp desc 

检查distinct on

+0

它看起来很完美。我应该在关闭线程之前测试真正的数据库(明天),但首先在本地测试显示您的查询效率提高了十倍。 谢谢,真的很感谢你的回答。 –

+0

谢谢。它完美地工作 –