我们有一个为人们服务的规定的表。例如:如何找到在众多行连续的日期在SQL Server
id people_id dateStart dateEnd
1 1 28.07.14 19.07.16
2 2 14.04.15 16.02.16
3 2 16.02.16 18.04.16
4 2 18.04.16 27.06.16
5 2 27.06.16 19.07.16
6 2 19.07.16 NULL
7 3 24.02.12 17.06.12
8 3 23.07.12 19.09.12
9 3 18.08.14 NULL
10 4 28.06.15 NULL
11 5 19.01.16 NULL
我需要的是持续时间超过一年以上再算上天通未完成不间断服务的实际开始日期,提取不同people_id的(客户)。两个不同行的“开始日期”和“结束日期”应该是相同的,并计为连续的。一个客户只能有一个未完成的服务。
所以表的完美效果上面会:
people_id dateStart lasts(days)
2 14.04.15 472
3 18.08.14 711
4 28.06.15 397
我没有问题,跟单服务:
SELECT
--some other columns from PEOPLE,
p.PEOPLE_ID,
s.DATESTART,
DATEDIFF(DAY, s.DATESTART, GETDATE()) as lasts
FROM
PEOPLE p
INNER JOIN service s on s.ID =
(
SELECT TOP 1 s2.ID
FROM service s2
WHERE s2.PEOPLE_ID = p.PEOPLE_ID
AND s2.DATESTART IS NOT NULL
AND s2.DATEEND IS NULL
ORDER BY s2.DATESTART DESC
)
WHERE
DATEDIFF(DAY, s.DATESTART , GETDATE()) >= 365
但我无法弄清楚如何确定连续服务。
如果'dateEnd '是'null',这是否意味着它正在进行? – Ash
@AshwinNair是的。我只需要活跃的客户。如果有人没有'dateEnd = NULL'的任何服务,他**不**活跃。 –
你正在使用什么版本的SQL Server? – Squirrel