使用行号计算日期之间的行?

时间:2018-03-14 19:25:54

标签: sql

我试图找到两个日期之间的行数。基本上我有一个日期为1/1/2018 - 4/1/2018的认证,我需要这些日期的支付期数。

以下是我正在查看的数据:

create table #dates
(
    pp_start_date date,
    pp_end_date date
)

insert into #dates (pp_start_date,pp_end_date)
values ('2017-12-28', '2018-01-10'),
       ('2018-01-11', '2018-01-24'),
       ('2018-01-25', '2018-02-07'),
       ('2018-02-08', '2018-02-21'),
       ('2018-02-22', '2018-03-07'),
       ('2018-03-08', '2018-03-21'),
       ('2018-03-22', '2018-04-04'),
       ('2018-04-05', '2018-04-18');

当我运行此查询时,

SELECT 
    ad.pp_start_date, ad.pp_end_date, orderby
FROM
    (SELECT
         ROW_NUMBER() OVER (ORDER BY pp_start_date) AS orderby, * 
     FROM
         #dates) ad
WHERE
    '2018-01-01' <= ad.pp_end_date

我想要只获得7行。这甚至可能吗?在此先感谢您的帮助!

编辑 - 好的,所以使用count(*)工作来获取行数但现在我试图获得2个动态日期的行数形成另一个临时表但我没有看到一种方法来关联数据。  使用上面引用的#dates临时表给出了日期数据。现在使用这些数据:

create table #stuff
([month] date,
[name] varchar(20),
units int,
fips_code int,
auth_datefrom date,
auth_dateto date)


  insert into #stuff (month,name,units,fips_code,auth_datefrom,auth_dateto)
values ('2018-01-01','SMITH','50','760', '2018-01-01', '2018-04-01');

  insert into #stuff (month,name,units,fips_code,auth_datefrom,auth_dateto)
values ('2018-01-01','JONES','46','193', '2018-01-01', '2018-04-01');

  insert into #stuff (month,name,units,fips_code,auth_datefrom,auth_dateto)
  values ('2018-01-01','DAVID','84','109', '2018-02-01', '2018-04-01');

我想以某种方式创建一个语句来执行#dates表中的行计数,其中在#stuff表中引用了auth日期我无法弄清楚如何关联它们或加入它们。

pp_start_date&lt; = auth_dateto和pp_end_date&gt; = auth_datefrom

这是#dates的输出 pp_start_date pp_end_date 2017-12-28 2018-01-10 2018-01-11 2018-01-24 2018-01-25 2018-02-07 2018-02-08 2018-02-21 2018-02-22 2018-03-07 2018-03-08 2018-03-21 2018-03-22 2018-04-04 2018-04-05 2018-04-18

这是#stuff的输出 月份名称单位fips_code auth_datefrom auth_dateto 2018-01-01 SMITH 50 760 2018-01-01 2018-04-01 2018-01-01 JONES 46 193 2018-01-01 2018-04-01 2018-01-01 DAVID 84 109 2018-02-01 2018-04-01

我正在尝试使用#stuff中的auth_datefrom和auth_date来查找来自#dates的行数。

2 个答案:

答案 0 :(得分:0)

尝试这个。

SELECT ad.pp_start_date, ad.pp_end_date, orderby
from (select 
row_number()over ( order by pp_start_date) as orderby, * from
   #dates) ad
  where    ad.pp_end_date <= '2018-01-01'
  or ad.pp_start_date >=  '2018-01-01'

答案 1 :(得分:0)

你在找这个吗?

select d.*
from #dates d
where d.startdate <= '2018-04-01' and
      d.enddate >= '2018-01-01';

这将返回所有具有您指定时间段的日期的行。

我不确定row_number()的作用。如果你想要计数,那么:

select count(*)
from #dates d
where d.startdate <= '2018-04-01' and
      d.enddate >= '2018-01-01';