【问题标题】:Selecting latest of rows with the same values in several columns在几列中选择具有相同值的最新行
【发布时间】:2012-09-05 03:15:52
【问题描述】:

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

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

有没有办法编写一个 sql 查询,以便我获得所有 VALID 测量值,即在坐标和站 ID 相同的情况下,只有最新的测量值?

我不太擅长 SQL,所以我什至不知道该用谷歌搜索什么,所以即使你只知道我应该使用什么类型的命令,任何指针都非常感谢 :)

编辑:

我的任务刚刚改了,显然站号无所谓,只有坐标和时间。

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

【问题讨论】:

    标签: sql


    【解决方案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
    

    【讨论】:

    • 嗯,就像你说的,显然 SQL 变体很有帮助。似乎使用的数据库是基于 SQL-92 的,并且无法进行分区......您上面表达的相同逻辑是否可以在旧标准中实现?
    • 成功了!非常感谢,如果可以的话,我会给你一百个加分:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-06
    • 1970-01-01
    • 2014-07-14
    • 2017-02-14
    • 2015-07-17
    • 1970-01-01
    • 2014-12-08
    相关资源
    最近更新 更多