Selecting latest of rows with the same values in several columns

In a project I am working on there are measurements stored in a database. A measurement consists of a worldcoordinate (posX, posY, posZ) a station identification number (stationID) and a time for measurement (time).

Sometimes a measurement is redone in the field for different reasons and then there are several measurements with the same coordinate and station id but performed at different times.

Is there a way to write an sql query such that I get all VALID measurements ie, only the latest ones in the case where the coordinates and station id are the same?

I am not very adept at SQL so I don't even really know what to google for so any pointers are very much appreciateed even if you only know what type of command I should use :)

EDIT:

My task was just changed, apparently station id does not matter, only coordinates and times.

Also, I am using DISQLite3 that implements SQL-92.

Upvotes: 2

Views: 93

Answers (1)

podiluska
podiluska

Reputation: 51504

Yes, you can do it in SQL.

It seems you want to take the latest entry for each combination of station and co-ordinates - look at GROUP BY or ROW_NUMBER()

Depending on your SQL variant (It's helpful if you specify it), something like...

 select *
 from
     (Select *, 
             row_number() over (Partition by coordinates, stationid order by measurementtime desc) rn
      from yourtable
     ) v
 where rn = 1

Without Ranking functions

 select yourtable.* 
 from yourtable
      inner join
      (
           select coordinate, MAX(time) maxtime from yourtable
           group by coordinate 
      ) v
on yourtable.coordinate = v.coordinate
and yourtable.time = v.maxtime

Upvotes: 1

Related Questions