1

データは次のとおりです。

empID Date     Type
----- -------- ----
    1 1/1/2012  u
    1 1/2/2012  u
    1 1/3/2012  u
    1 2/2/2012  u
    4 1/1/2012  u
    4 1/3/2012  u
    4 1/4/2012  u
    4 1/6/2012  u

戻ります:

empID count
----- -----
    1     2
    4     3

2 つの日付が「一緒」の場合は 1 回としてカウントされ、日付が離れている場合は 2 回としてカウントされます。これは、従業員の出席を追跡するためのものです... SQLステートメントは、「一緒に」日付でグループ化し、それらを1としてカウントするように見えます...私はロジックに本当に苦労しています。

4

2 に答える 2

1
SELECT 
    empID
  , COUNT(*) AS cnt
FROM 
    tableX AS x
WHERE
    NOT EXISTS
        ( SELECT *
          FROM tableX AS y
          WHERE y.empID = x.empID
            AND DATEADD ("d", -1, x.[Date]) = y.[Date]
        )
GROUP BY
    empID ;
于 2012-08-13T17:32:54.347 に答える
0

これを試して:

;WITH CTE as
(select *,ROW_NUMBER() over (partition by empID order by date) as rn from test2 t1)

select empID,COUNT(*) as count
from CTE c1
where isnull((DATEDIFF(day,(select date from CTE where c1.rn=rn+1 and empID=c1.empID ),c1.date)),0) <> 1
group by empID 
于 2012-08-13T18:10:14.240 に答える