Sql 根据另一列的值查询该列

Sql 根据另一列的值查询该列,sql,apache-spark-sql,pyspark-sql,Sql,Apache Spark Sql,Pyspark Sql,嗨,我有一个这样的桌子结构 id-rank id name value rank 1-1 1 abc somevalue1 1 1-2 1 abc somevalue2 2 1-3 1 abc somevalue3 3 2-1 2 abc somevalue4 1 3-1 3 abc somevalue5 1 这里id-rank是id和rank的串联。现在,如果秩大于1(比如说2),那么我想提取id秩1-1的值列数据,即som

嗨,我有一个这样的桌子结构

id-rank id name  value    rank
  1-1   1  abc somevalue1  1
  1-2   1  abc somevalue2  2
  1-3   1  abc somevalue3  3
  2-1   2  abc somevalue4  1
  3-1   3  abc somevalue5  1
这里id-rank是id和rank的串联。现在,如果秩大于1(比如说2),那么我想提取id秩1-1的值列数据,即somevalue1

下面是我编写的sql

select *
case when rank > 1 then (select value where id-rank = concat(id,'-',rank-1) from table)
else ''
from table
预期产出为:

id-rank id name  value    rank new_value
  1-1   1  abc somevalue1  1
  1-2   1  abc somevalue2  2   somevalue1  
  1-3   1  abc somevalue3  3   somevalue2  
  2-1   2  abc somevalue4  1
  3-1   3  abc somevalue5  1
我当前的输出是

id-rank id name  value    rank new_value
  1-1   1  abc somevalue1  1
  1-2   1  abc somevalue2  2   null
  1-3   1  abc somevalue3  3   null
  2-1   2  abc somevalue4  1
  3-1   3  abc somevalue5  1
但我在new_value列中得到的是null。我猜这是因为它只是比较相邻的列。我是sql新手,请告诉我是否有人对此有解决方案

提前感谢

您可以使用
lag()

编辑:如果您正在查找以前的特定值,则只有
lag()
就足够了

select t.*, 
       lag(value) over (partition by id order by rank) as new_value
from table t;

我将使用一个有条件的
max()


您当前的输出是什么?MySQL SQL Server。您实际使用的RDBMS是什么?@sandra我添加了当前的output@Larnu基本上我是在Azure Databricks云上运行的。我对数据库方面不太了解。@VipendraSingh。请标记您真正使用的DBMS。为什么需要(排名>1…条件时的情况)。没有它你会得到同样的结果吗?@GeorgeJoseph。是的,可能是。如果op特别查找以前的值。
select t.*, 
       lag(value) over (partition by id order by rank) as new_value
from table t;
select t.*,
       max(case when rank = 1 then value end) over
           (partition by id) as new_value
from t;