Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 仅跳过首次服务日期_Sql_Sql Server_Reporting Services - Fatal编程技术网

Sql 仅跳过首次服务日期

Sql 仅跳过首次服务日期,sql,sql-server,reporting-services,Sql,Sql Server,Reporting Services,我希望跳过每个客户的第一个服务日期,前提是该服务日期与客户的第一个服务日期匹配 例如,如果客户于2017年4月1日登记 客户注册日期服务日期 sam 1-04-2017 1-04-2017 sam 1-04-2017 1-04-2017 jon 1-04-2017 1-04-2017 jon 1-04-2017 1-05-2017 sam 1-04-2017 1-05-2017 jon 1-04-2017 1-07-2017 摘要页面的预期结果 total clients total s

我希望跳过每个客户的第一个服务日期,前提是该服务日期与客户的第一个服务日期匹配

例如,如果客户于2017年4月1日登记

客户注册日期服务日期
sam 1-04-2017 1-04-2017 sam 1-04-2017 1-04-2017 jon 1-04-2017 1-04-2017
jon 1-04-2017 1-05-2017 sam 1-04-2017 1-05-2017
jon 1-04-2017 1-07-2017 摘要页面的预期结果

total clients total services 2 4 客户总数服务总数 2 4 希望查看详细信息时的预期结果

客户注册日期服务日期
sam 1-04-2017 1-04-2017 jon 1-04-2017 1-05-2017 sam 1-04-2017 1-05-2017
jon 1-04-2017 1-07-2017

此外,您的客户端有一个注册,但有多个服务。
考虑到查询将上载到ssrs,并且服务日期将是@begindate和@enddate之间的变量s.begindate,我如何跳过查询中的第一个服务日期

根据您的描述,您似乎想要一个使用窗口函数的简单
where
子句:

select t.*
from (select t.*,
             min(enrollment_date) over (partition by client) as first_enrollment_date
      from t
     ) t
where first_enrollment_date > service_date;

但是,这将只剩下两项服务,因此不清楚您真正想要什么。

根据您提供的服务,我猜您需要这项服务

CREATE TABLE T (id int identity, client varchar(10), enrollment_date date, service_date date)

--client enrollment date     service date
INSERT INTO T VALUES 
('sam','1-04-2017','1-04-2017'),
('sam','1-04-2017','1-04-2017'),
('jon','1-04-2017','1-04-2017'),
('jon','1-04-2017','1-05-2017'),
('sam','1-04-2017','1-05-2017'),
('jon','1-04-2017','1-07-2017')

DECLARE @StartDate date = '1-04-2017', @EndDate date = '1-07-2017'

SELECT COUNT(DISTINCT client) AS total_clients, COUNT(1)-COUNT(DISTINCT client) AS total_services
FROM T 
WHERE service_date BETWEEN @StartDate AND @EndDate

SELECT DISTINCT T.* 
FROM T T JOIN (SELECT client, MIN(id) AS enroll_id FROM T GROUP BY client) E
ON T.client = E.client
AND T.id <> E.enroll_id
WHERE service_date BETWEEN @StartDate AND @EndDate
ORDER BY 2, 3

DROP TABLE T
这只是从总计数中减去客户机的不同计数,以抵消注册事件


希望这对您有所帮助。

这两个客户是显而易见的。这三项服务是什么?在这种情况下,“抵消”是什么意思?这是一个非常合理的解释。如果OP能澄清这是他真正想要的,那就太好了。是的,一些额外的细节会很好。我开始编写一些类似于您发布的内容的代码,但随后许多服务日期与注册日期匹配的事实让我感到困惑。我喜欢这样简单的解决方案,但总会有一些事情发生……:)大家好,很抱歉没有提供尽可能多的细节。我已经更新了问题以包含更多的细节。@HenryAmadi数据库中你的日期是否真的有时间?您需要能够区分注册日期和服务日期的内容。或者,它们都只是一个没有时间的数据吗?哦,不,它有12:00 am附加到所有。
select t.*
from (select t.*,
             min(enrollment_date) over (partition by client) as first_enrollment_date
      from t
     ) t
where first_enrollment_date > service_date;
CREATE TABLE T (id int identity, client varchar(10), enrollment_date date, service_date date)

--client enrollment date     service date
INSERT INTO T VALUES 
('sam','1-04-2017','1-04-2017'),
('sam','1-04-2017','1-04-2017'),
('jon','1-04-2017','1-04-2017'),
('jon','1-04-2017','1-05-2017'),
('sam','1-04-2017','1-05-2017'),
('jon','1-04-2017','1-07-2017')

DECLARE @StartDate date = '1-04-2017', @EndDate date = '1-07-2017'

SELECT COUNT(DISTINCT client) AS total_clients, COUNT(1)-COUNT(DISTINCT client) AS total_services
FROM T 
WHERE service_date BETWEEN @StartDate AND @EndDate

SELECT DISTINCT T.* 
FROM T T JOIN (SELECT client, MIN(id) AS enroll_id FROM T GROUP BY client) E
ON T.client = E.client
AND T.id <> E.enroll_id
WHERE service_date BETWEEN @StartDate AND @EndDate
ORDER BY 2, 3

DROP TABLE T
total_clients total_services
------------- --------------
2             4

id          client     enrollment_date service_date
----------- ---------- --------------- ------------
4           jon        2017-01-04      2017-01-05
6           jon        2017-01-04      2017-01-07
2           sam        2017-01-04      2017-01-04
5           sam        2017-01-04      2017-01-05