Как отфильтровать столбец по значениям другого столбца в SQL - PullRequest
0 голосов
/ 11 июня 2019

Мне нужно построить новый столбец в моей существующей таблице.Итак, есть два столбца: «cmg» и «effdate», и мне нужно создать новый столбец с именем «enddate».Таким образом, для определенного cmg максимальное значение eff_date = current 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, а затем получить конечную дату, как показано ниже:

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 ]

1 голос
/ 11 июня 2019

Используйте LEAD и OVER

SELECT cmg, effdate, LEAD(DATEADD(DAY, -1, effdate),1, getdate()) OVER (PARTITION BY cmg ORDER BY effdate ASC) as enddate
FROM testcmg
ORDER BY cmg, effdate DESC
0 голосов
/ 11 июня 2019

Следующий запрос должен делать то, что вы хотите:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...