选择多个行中具有相同值的最新行

时间:2012-09-04 11:53:50

标签: sql

在我正在进行的项目中,存储在数据库中的测量值。测量由世界坐标(posX,posY,posZ),台站识别号码(stationID)和测量时间(时间)组成。

有时,由于不同的原因,在现场重新进行测量,然后有几个具有相同坐标和站ID但在不同时间执行的测量。

有没有办法编写一个sql查询,这样我得到所有的VALID测量结果,即只有在坐标和工作站ID相同的情况下才能获得最新的测量结果?

我不是很擅长SQL,所以我甚至都不知道要google什么,所以即使你只知道我应该使用什么类型的命令,任何指针都非常受欢迎:)

编辑:

我的任务刚刚改变,显然站点ID无关紧要,只有坐标和时间。

另外,我使用的是实现SQL-92的DISQLite3。

1 个答案:

答案 0 :(得分:1)

是的,您可以在SQL中执行此操作。

您似乎想要为车站和坐标的每个组合选择最新条目 - 请查看GROUP BYROW_NUMBER()

取决于您的SQL变体(如果您指定它,它会很有用),类似于......

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

没有排名功能

 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