2013-03-26 78 views
0

我有表id,timestamp和控制值。SQL查询计算基于某个值的天数

我需要ID查询其在序列

TimeS ID Kontrol 
2012-06-18 5457554F-E9A5-4312-8BA3-424B2333D0B7 1 
2012-06-14 3FC4AC80-7D94-496A-92D0-22350CA3CEA9 1 
2012-06-14 FE3C1872-0F13-48CC-A6C9-BBE0EAB07B9D 0 
2012-06-13 FE3C1872-0F13-48CC-A6C9-BBE0EAB07B9D 0 
2012-06-12 FE3C1872-0F13-48CC-A6C9-BBE0EAB07B9D 0 
2012-06-11 FE3C1872-0F13-48CC-A6C9-BBE0EAB07B9D 0 

具有控制值0 4天或更应该例如返回FE3C1872-0F13-48CC-A6C9-BBE0EAB07B9

+0

。 Okey我会发布一些数据 – 2013-03-26 10:02:53

+0

你认为这是很好的样本数据吗?根据你的定义没有记录显示。 – 2013-03-26 10:25:15

+0

Okey编辑 – 2013-03-26 10:27:42

回答

0

试试这个:

SELECT t1.id 
    FROM tableName t1 
WHERE t1.kontrol = 0 
    AND EXISTS (SELECT 1 
       FROM tableName t2 
       WHERE t2.id = t1.id 
        AND t2.kontrol = 0 
        AND t2.timeS = t1.timeS + 1 
        AND EXISTS (SELECT 1 
           FROM tableName t3 
           WHERE t3.id = t2.id 
            AND t3.kontrol = 0 
            AND t3.timeS = t2.timeS + 1 
            AND EXISTS (SELECT 1 
               FROM tableName t4 
               WHERE t4.id = t3.id 
               AND t4.kontrol = 0 
               AND t4.timeS = t3.timeS + 1))) 
+0

不限于连续的日子 – 2013-03-26 10:23:51

+0

它不确保日期 – 2013-03-26 10:24:36

+0

@efe demir:编辑。请尝试这个新的解决方案。 – Rachcha 2013-03-26 10:33:20

0
SELECT DISTINCT t1.id 
FROM table t1 
    INNER JOIN 
    table t2 ON t2.TimeS+1 days=t1.TimeS 
    INNER JOIN 
    table t3 ON t3.TimeS+2 days=t1.TimeS 
    INNER JOIN 
    table t4 ON t4.TimeS+3 days=t1.TimeS 
WHERE t1.Control = 0 AND 
     t2.Control = 0 AND 
     t3.Control = 0 AND 
     t4.Control = 0 
+0

您可以再次检查问题请 – 2013-03-26 10:31:47

+0

查询看起来不错,对于您的RDMS,您可能需要调整添加天 – 2013-03-26 10:34:35

+0

您忘记加入ID ,但这样的事情应该工作 – 2013-03-26 10:40:18

0

尝试此查询

select 
    id, 
    count(distinct TimeS) 
from 
    table1 
where 
    kontrol=0 
group by 
    id 
having 
    count(distinct TimeS) >= 4; 

FIDDLE

使用MSSQL林
+0

_“其具有控制值0 ** 4天或更长时间** “_所以,即使你会采取行动日期考虑在内,这些时间范围内的其他控制值不应该中断。 – 2013-03-26 10:55:44

+0

此查询中TimeS不连续 – 2013-03-26 11:27:47