这里是第一次海报,也是自学成才的SQLer,所以我知道我很烂(我只需要工作即可)
基本上,我正在尝试编写一个查询,该查询基于“丢失”的行将行插入表中。
下面有一些代码,请注意,当我有(n)时,这就是我要填写行号的位置。例如,在第7行中,我希望它从中减去第2行的日期第1行。如果该日期差大于4,请进行减法运算并除以3,以找出我必须插入的零行数。然后,一旦我确定要插入多少行,请插入空值,然后每次都减去3个月以得到正确的日期。完成后,检查第2行和第3行之间的差异。
所以这是temp_rdq:
adate rdq
2020-06-30 2020-08-10
2020-03-31 2020-05-26
2019-09-30 2019-11-27
2019-06-30 2019-08-13
2018-12-31 2019-07-18
您看到第2行和第3行之间的rdq之间有6个月的差距吗? 我想编写一个查询,以识别其中有6个月的间隔,并插入“ null”行,如下所示: 约会rdq 2020-02-27空 如果有9个月的间隔,请插入2行,其中日期遵循3个月的模式
declare @tmpRowCount int
set @tmpRowCount=(SELECT count(*) from #temp_RDQ);
declare @n int
set @n=1
While (@n<=@tmpRowCount)
BEGIN
if datediff(month,#temp_rdq.rdq(n+1),#temp_rdq.rdq(n))>4
set @inserts= FLOOR( datediff(month,#temp_rdq.rdq(n+1),#temp_rdq.rdq(n)/3));
while (@inserts>0)
BEGIN
WITH K AS(
SELECT
ROW_NUMBER() OVER (ORDER BY adate desc) row_num, adate,rdq
FROM #temp_rdq)
insert into #temp_RDQ (adate,rdq)
SELECT DATEADD(month,-3*@inserts,#temp_rdq.rdq(n)), NULL
FROM K
WHERE row_num =@n
SET @inserts=@inserts-1;
END
SET @n=@n+1
END
任何帮助将不胜感激! 我已经尝试过使用LEAD函数,但是我仍然需要指定我正在谈论的特定行,以便知道要插入多少个空行。
与此相关的一个难题是,最后,我需要能够输入一个数字,这样它将使我的收入日期早于7行。就像这样:
WITH t AS(
SELECT
ROW_NUMBER() OVER (ORDER BY adate desc) row_num, adate,rdq
FROM #temp_rdq)
SELECT
adate, rdq
FROM
t
WHERE
row_num =@variable_to_be_input_later
谢谢!