我需要在现有表中建立一个新列。 所以有两列, '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
答案 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