【问题标题】:Most recent TIMESTAMP joining the same table最近的 TIMESTAMP 加入同一个表
【发布时间】:2021-03-19 03:28:44
【问题描述】:

我有一个包含以下列的表格:START POINT、END POINT、START DATE、END DATE、RIDE NUMBER 我需要从中接收所有记录,以及 END POINT, STARTE DAT, END DATE 以获取来自同一起点的最新记录(开始日期)。

例子:

  1. 起点 - A,终点 - B,开始日期 1/1/1 10:30,结束日期 1/1/1 10:35
  2. 起点 - A,终点 - C,开始日期 1/1/1 10:20,结束日期 1/1/1 10:35
  3. 起点 - A,终点 - B,开始日期 1/1/1 10:25,结束日期 1/1/1 10:35
  4. 起点 - A,终点 - D,开始日期 1/1/1 10:27,结束日期 1/1/1 10:35

所以我需要从相同的起始点t(在示例中为 A,结束点)接收最后一次骑行(START DATE,结束日期无关紧要)没关系)对于每条记录。

所以对于 ride 1,我应该得到 ride 4。对于 2 我应该获得 nothing(这是最后一次骑行),对于 3 我应该获得记录 2 并且对于记录 4 我应该得到记录 3。以此类推。

问题是起点很多,开始日期也很多。

我试图使用 MAX 函数加入具有开始日期条件的同一张表(第一次旅行的开始日期

你知道如何加入吗?

【问题讨论】:

    标签: sql oracle timestamp max


    【解决方案1】:

    像下面这样的东西应该可以完成这项工作。但是,如果同一开始日期有多个记录,则将返回两条记录。您可能必须通过选择 min rowid 或 max rowid 来决定选择其中一个。

     Select 
        a.STARTPOINT,a.ENDPOINT, a.STARTDATE, a.ENDDATE,a.RIDENUMBER,recentride.ENDPOINT,recentride.STARTEDATE,recentride.ENDDATE
        from ridetable a,ridetable recentride
        where a.startpoint = recentride.startpoint 
        and  recentride.startedate < a.STARTEDATE
        and  recentride.startedate = (select max(c.STARTEDATE) 
                                      from ridetable c
                                      where c.startpoint = a.startpoint
                                      and c.startedate < a.STARTEDATE) 
    

    【讨论】:

    • 嘿,它似乎正在工作。非常感谢,但我能解释一下你为什么定义第三张桌子吗?我以同样的方式做,但我正在尝试 (select max(recentride.startdate)...),我想那是我的错误。
    • 这只是一种方法,第三张表是找到小于当前记录的最大值。如果此查询帮助您标记并支持答案。
    猜你喜欢
    • 2021-12-03
    • 1970-01-01
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多