2016-08-09 3 views
0
사이에 기록을 찾고

다음과 같이 내 문제는 다음과 같습니다SQL 서버 SUM DATEDIFF 및 NULL 두 날짜

나는 열이있는 테이블 (라는 테이블)이

: ID, 이벤트, STARTDATE를

STARTDATE가는 종료 날짜 1900-01-01에서 현재 날짜까지 enddate도 수행합니다. 이벤트는 임의의 문자열이며 각 ID는 시간이 지남에 따라 여러 이벤트를 시작 및 종료합니다. (한 번에 하나의 이벤트 만 가능합니다.)

1989-01-01에서 2000 사이의 날짜에 대한 레코드를 가져 오는 경우를 고려하십시오. -01-01. 우리는 날짜 사이의 차이점을 합하여 각 ID가 어떤 일을 하느냐에 소비하는 총 주 수를 얻고 싶습니다.

내가 가진 probelm은 아직 어떤 사건이있는 데이터에 epeople이 있다는 것입니다. 자신의 ENDDATE가 null, 그래서에 관심이 있어요.

나는 현재

SELECT 
    id, 
    ISNULL(enddate, 2000-01-01 sum(datediff(weeks, startdate, enddate)) AS wksdoingstuff 
WHERE 
    event IN ('something', 'somethingelse'. 'anotherthing') 
    AND BETWEEN 1989-01-01 AND 2000-01-01 
GROUP BY 
    id 
을 시도하고있다

내가 누구인지 후 : 나는 별개의 ID의 행을 원하는

및 각각의 하나는 (그 순간에 내 코드를 그들이 관심

의 사건에 얼마나 많은 주에 해당하는 수를해야합니다 확실히 내가 거기에 쓴) 각 이벤트에 있었던 각기 다른 기간을 합산 한 각 ID에 대해 여러 행을 제공합니다.

+2

당신이 우리를 표시 한 코드를 실행할 수있는 꿈에도 생각하지 않습니다. ** runnable ** 코드의 자체 포함 된 예제를 만들려고합니다. (실제로 몇 줄의 행을 테이블 변수로 채우고 실제로 FROM 절로 쿼리하면 그 부분이 엉망이 되어도 수정됩니다. 'ISNULL' 행 등) –

+0

또한 찾고있는 출력에 대한 명확한 정의를 제공해야합니다. 'DATEDIFF'는 * transition *을 계산하고,'week'보다는'week'를 의미한다고 가정한다면, 첫 번째가 토요일이고 두 번째가 두 번째 일 경우, 단지 하루 간격으로 두 개의 날짜에 대해 1을 반환 할 수 있음을 알아야합니다 일요일입니다. 그것이 당신이 원하는 행동입니까? * 부분적 * 주를 고려해야합니까? –

+0

예, 부분적인 동작은 분석에 적합합니다. 또한 데이터가 올바른지 항상 확인할 수 있습니다. 내 코드가 실행되지 않는 것으로 알고 있습니다. 서버에 액세스 할 수있는 컴퓨터가 아니며 인터넷에 접속할 수 없을 때 답변에 대한 메모를 작성하고 신청해야합니다. 그것. –

답변

0

where 절에서 종료 날짜가 null이 아니며 반환 된 열에서 isnull을 제거해야합니다. datediff psrt 주변에서 합계를 수행해야합니다. 죄송합니다. 전화로 코드를 입력 할 수 없습니다. 내가 나중에 키보드를 가지고있을 때 나는 뒤로 스윙 할 거라는 것을 기억한다!

또한 귀하의 datediff에서 dd (일)를 사용해야한다는 것에 동의합니다. 그렇지 않으면 부분적인 주를 잃게됩니다. 당신은이 작업을 실행해야 당신은 항상 7.00

+0

내 where 절에 notnull이 포함되어 있습니까? 하지만 난 기본적으로 NULL을 날짜를 2000-01-01라고 말하고 싶습니다. 왜냐하면 저는 기본적으로 얼마나 많은 주가 그들이 날짜의 창 동안 어떤 이벤트 그룹화에 있었는지 세고 있기 때문입니다. null이 아닌 날짜 만 추가하기를 원하지 않습니다. 종료 날짜가 null 인 사용자는 아직 이벤트에 있으며 내가 몇 주 동안 있었는지 계산하려고합니다. –

0

하여 합계를 소수로 캐스팅 AMD 나눌 수 있습니다 ..

SELECT 
    id, 
    sum(datediff(weeks, startdate, ISNULL(enddate, '2000-01-01')) AS wksdoingstuff 
WHERE 
    event IN ('something', 'somethingelse'. 'anotherthing') 
    AND BETWEEN 1989-01-01 AND 2000-01-01 
GROUP BY 
    id 
+0

고맙습니다. –

+0

완벽하게 작동했습니다. –