我正在尝试创建一个输出,其中> = 200个单位已经连续出售了。我使用超前函数获取下一个开始日期,但无法获取05/04开始日期的05/06结束日期。我们需要某种循环吗?
CREATE TABLE tbl_sls
(date1 date, Sales int);
INSERT INTO sales
(date1, Sales)
VALUES
('2019-05-01', 200),
('2019-05-02', 200),
('2019-05-03', 100),
('2019-05-04', 200),
('2019-05-05', 200),
('2019-05-06', 200),
('2019-05-10', 200),
('2019-05-11', 200),
('2019-05-12', 100);
我已经写了下面的代码,但是走不远了。
select date1, sales, rank() over(partition by sales order by date1)
from (
select a.date1, b.sales from
(select date1 from sales
where date1<'2019-05-07') a
left join
(select date1, sales from sales
where sales>=200) b
on a.date1=b.date1
) x
预期输出:
date_start|date_end
'2019-05-01'|'2019-05-02'
'2019-05-04'|'2019-05-06'
'2019-05-10'|'2019-05-11'
答案 0 :(得分:1)
这是一个空白问题。这是使用SQL Server语法的解决方案:
select min(date1), max(date1), sales
from (select s.*, row_number() over (partition by sales order by date1) as seqnum
from sales s
) s
group by dateadd(day, - seqnum, date1), sales;
Here是db <>小提琴。这样会给出相同销售编号的相邻值。
这是对您的特定问题的更好答案:
select min(date1), max(date1)
from (select s.*, row_number() over (order by date1) as seqnum
from sales s
where sales >= 200
) s
group by dateadd(day, - seqnum, date1)
order by 1