Re: Select latest Timestamp values with group by

From: Adarsh Sharma <adarsh(dot)sharma(at)orkash(dot)com>
To: pgsql-general General <pgsql-general(at)postgresql(dot)org>
Subject: Re: Select latest Timestamp values with group by
Date: 2011-10-11 04:55:10
Message-ID: 4E93CC2E.2030407@orkash.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Thanks Craig, but I solved the issue by the below query :-

Here is the query for that :-

select bb_id,lat,lon,speed,dt_stamp from demo_table
inner join
(select bb_id as did, max(dt_stamp) as ts
from demo_table group by bb_id) as ds
on demo_table1.bb_id = ds.did and demo_table1.dt_stamp = ds.ts;

Best Regards
Adarsh

Adarsh Sharma wrote:
> Any update on the below query :-
> I tried the below query but :-
> *
> select bb_id,lat,lon,max(dt_stamp) from gps_tracker group by bb_id;
> *
> ERROR: column "gps_tracker.lat" must appear in the GROUP BY clause or
> be used in an aggregate function
> LINE 1: select bb_id,lat,lon,max(dt_stamp) from gps_tracker group by...
> ^
>
> ********** Error **********
>
> ERROR: column "gps_tracker.lat" must appear in the GROUP BY clause or
> be used in an aggregate function
> SQL state: 42803
> Character: 14
>
> I think this can be solved by applying some function to lat lon values
> of max(dt_stamp) row.
>
>
> Thanks
>
>
>
> Adarsh Sharma wrote:
>> Hi Craig :-
>>
>> Below is the schema of my table :-
>>
>> CREATE TABLE demo_table
>> (
>> id character varying NOT NULL,
>> lat double precision,
>> lon double precision,
>> speed double precision,
>> dt_stamp timestamp without time zone DEFAULT now(),
>> CONSTRAINT gps_tracker_pkey PRIMARY KEY (id)
>> )
>> WITH (
>> OIDS=FALSE);
>>
>> I let u know after some work on Window functions
>>
>> Thanks
>> Craig Ringer wrote:
>>> On 10/10/2011 08:32 PM, Adarsh Sharma wrote:
>>>> Dear all,
>>>>
>>>> I need to write a query to select latest rows with timestamp values.
>>>> My ID is repeated with lat lon and timestamp. I want the latest row of
>>>> each ID ( group by id ).
>>>
>>> [snip]
>>>
>>>> "3911";"661000212";26.8491101532852;92.8058205131302;0;"2011-10-14
>>>> 12:47:33.360572"
>>>>
>>>>
>>>> Can anyone let me know the query for that.
>>>
>>> No, they can't. You only posted semicolon-separated data, not a
>>> schema with column names or anything much else.
>>>
>>> For a task like this you can use a window function, or you can
>>> self-join and use a WHERE clause to match the greatest row. Using a
>>> window function will be MUCH more efficient, so only use the
>>> self-join if you're running on a really old version of PostgreSQL.
>>>
>>> http://www.postgresql.org/docs/9.0/static/tutorial-window.html
>>> http://www.postgresql.org/docs/9.0/static/functions-window.html
>>>
>>> Using the first_value or last_value window functions with an
>>> ordering clause to select the greatest timestamp within each window
>>> frame.
>>>
>>> http://www.postgresql.org/docs/9.0/static/functions-window.html#FUNCTIONS-WINDOW-TABLE
>>>
>>>
>>> --
>>> Craig Ringer
>>
>>
>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Craig Ringer 2011-10-11 04:58:04 Re: Select latest Timestamp values with group by
Previous Message John R Pierce 2011-10-11 04:48:26 Re: Postgres 9.01, Amazon EC2/EBS, XFS, JDBC and lost connections