从连续日期中识别开始和结束日期

时间:2019-05-15 19:35:16

标签: sql

我正在尝试创建一个输出,其中> = 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'

1 个答案:

答案 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

And the db<>fiddle