如何根据SQL中另一列的值过滤列

时间:2019-06-11 10:15:07

标签: sql sql-server

我需要在现有表中建立一个新列。 所以有两列, 'cmg'和'effdate',我需要创建一个名为'enddate'的新列。 因此,对于特定的cmg, eff_date的最大值=当前日期 并且下一行中的日期应等于上一行中的日期-1。

例如,

cmg |  effdate
1      23/10/2018
1      1/10/2018
1      1/1/2018
3      1/12/2018
3      1/3/2018

我需要首先基于cmg列中的值过滤行,然后获取如下的enddate:

cmg |  effdate   |      enddate  
1      23/10/2018       currentdate 
1      1/10/2018        22/10/2018
1      1/1/2018         30/9/2018
3      1/12/2018        currentdate
3      1/3/2018         30/11/2018

2 个答案:

答案 0 :(得分:1)

使用LEAD和OVER

@Entity (tableName = "yourPersonneTableName")
public class Personne {

@PrimaryKey
private  int idP;
private String nom,prenom;
private int age, poids;

@TypeConverters({FemmeToStringConverter.class})
private List<Femme> femmeList;

@TypeConverters({EnfantToStringConverter.class})
private List<Enfant> enfant;

// setters and getters here

}

答案 1 :(得分:0)

以下查询应执行您想要的操作:

CREATE TABLE #temp (cmg INT, effdate DATE)

INSERT INTO #temp VALUES
(1,'2018-10-23'),
(1,'2018-10-01'),
(1,'2018-01-01'),
(3,'2019-03-01'),
(3,'2018-12-01')

SELECT cmg, effdate, LAG(DATEADD(DAY,-1,effdate),1, GETDATE()) OVER (PARTITION BY cmg ORDER BY effdate DESC) as enddate
FROM #temp
ORDER BY cmg, effdate DESC

结果如下,

cmg  effdate     enddate
1    2018-10-23  2019-06-11
1    2018-10-01  2018-10-22
1    2018-01-01  2018-09-30
3    2019-03-01  2019-06-11
3    2018-12-01  2019-02-28