【问题标题】:using max to select the previous record in same table sql oracle使用max选择同一张表sql oracle中的上一条记录
【发布时间】:2019-11-07 00:25:14
【问题描述】:

当我想编写一个查询以选择 sql oracle 表中的前一条记录时,我遇到了问题。

我使用 max 来进行查询:

select cur.wage ,max(prev.wage)
from t_wage prev 
inner join 
T_wage cur 
on 
cur.cntid=prev.cntid
where cur.wage=2*prev.wage
group by prev.wage
having max (prev.wage)< cur.wage 

假设我的表是

我希望结果检索最后一条记录并将其与倒数第二条进行比较,如果它加倍。

无论日期如何,我都不知道如何带上以前的记录。谁能告诉我哪里错了?

结果应该是:

3000   6000

【问题讨论】:

  • 您通常GROUP BY 与您SELECT 相同的列,除了那些是设置函数的参数的列。 IE。我会改用group by cur.wage
  • 你的 cur.wage/prev.wage 条件都搞砸了。也向我们展示预期的结果,我希望能理解你想要做什么。顺便说一句,这里的大多数人都希望样本数据和预期结果为格式化文本,而不是图像。
  • 我要检索表中每个cntid的最后一个和倒数第二个工资,
  • 上一次工资翻倍的人

标签: sql oracle


【解决方案1】:

我想你想要lag():

select t.
from (select t.*,
             lag(wage) over (partition by cntid order by dateid) as prev_wage
      from t
     ) t
where wage = 2 *  prev_wage;

【讨论】:

  • 我认为延迟在我的情况下不会起作用,因为它基本上使第一行成为第二行
  • 如果是最后一行的两倍,我想选择最后一行和倒数第二行
  • @Mlak 。 . .这会在同一行中为您提供两个值,这似乎是您的问题所要求的。
猜你喜欢
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 2021-12-08
  • 2015-12-11
  • 1970-01-01
  • 2018-09-24
  • 2019-08-31
  • 1970-01-01
相关资源
最近更新 更多