2012-07-12 3 views
1

여기에서 나는 사소한 문제가 해결되지 않는 것 같습니다. LogParser를 사용하여 일부 전화 시스템 CSV 로그 파일을 분석하고 있습니다. 요일별로 그룹화 된 두 날짜 사이의 모든 수신 통화 그래프를 생성하려고합니다. 나는 이것을 성취했지만, 월요일부터 시작하여 올바른 순서로 그래프를 표시하도록 고심하고있다. 다음과 같이 내가 LogParser와에 전달할 내 SQL 쿼리 : 그것은 실제로 모든 문에 의해 순서없이 올바른 순서로 출력로그 파서 ORDER BY CASE 문

SELECT to_string(to_timestamp(c1, 'yyyy/MM/dd HH:mm'), 'dddd') as Day, count(*) as Calls 
INTO graph.gif 
FROM C:\logs\*.txt 
WHERE c5 = 'I' 
AND to_timestamp(c1, 'yyyy/MM/dd HH:mm') 
    BETWEEN 
     timestamp('10/05/2012', 'dd/MM/yyyy') 
    AND timestamp('24/05/2012', 'dd/MM/yyyy') 
GROUP BY Day 

,하지만 난 첫 번째 열은 항상 일이라고 생각하는 날짜 범위 시작 on, 반면 나는 항상 월요일 (그래프의 쉬운 비교를 위해). 현재 일어나는 일은 내 로그 파일의 타임 스탬프를 요일의 문자열 표현 (출력 목적으로)으로 변환하고 '월요일'이 ' 화요일 '등등. 본능은 ORDER BY에서 CASE 문을 사용하는 것이었지만 LogParser는이를 받아들이지 않습니다.

이는 관련이 단지의 경우 내 전체 LogParser와 명령입니다,

C:\Program Files (x86)\Log Parser 2.2\Logparser.exe" -i:CSV "SELECT to_string(to_timestamp(c1, 'yyyy/MM/dd HH:mm'), 'dddd') as Day, count(*) as Calls INTO graph.gif FROM C:\logs\*.txt WHERE c5 = 'I' AND to_timestamp(c1, 'yyyy/MM/dd HH:mm') BETWEEN timestamp('10/05/2012', 'dd/MM/yyyy') AND timestamp('24/05/2012', 'dd/MM/yyyy') GROUP BY Day" -chartType:Column3D -chartTitle:"Incoming Calls" -values:ON -config:MyConfig.js -o:CHART -headerRow OFF -iHeaderFile C:\logs\header\header.txt 

단순히 내가 좋아하는 모든 관계없이 항상 날짜 범위, 월요일에 시작하는 내 결과 순서입니다. 어떤 아이디어?

EDIT - 이것은 ORDER BY에 포함 된 CASE 문을 사용하는 쿼리입니다.

SELECT to_string(to_timestamp(c1, 'yyyy/MM/dd HH:mm'), 'dddd') as Day, count(*) as Calls 
INTO graph.gif 
FROM C:\logs\*.txt 
WHERE c5 = 'I' 
AND to_timestamp(c1, 'yyyy/MM/dd HH:mm') 
    BETWEEN 
     timestamp('10/05/2012', 'dd/MM/yyyy') 
    AND timestamp('24/05/2012', 'dd/MM/yyyy') 
GROUP BY Day 
ORDER BY (CASE 
    WHEN Day = 'Monday' THEN 1 
    WHEN Day = 'Tuesday' THEN 2 
    WHEN Day = 'Wednesday' THEN 3 
    WHEN Day = 'Thursday' THEN 4 
    WHEN Day = 'Friday' THEN 5 
    WHEN Day = 'Saturday' THEN 6 
    WHEN Day = 'Sunday' THEN 7 
END) 

답변

0

같이 보일 필요에 의해 주문 :

order by (datepart(day, <date>)+5)%7 
: 데이터베이스가 하루-의 주 기능이있는 경우

order by (case when day = 'Monady' then 1 
       when day = 'Tuesday' then 2 
       when day = 'Wednesday' then 3 
       when day = 'Thursday' then 4 
       when day = 'Friday' then 5 
       when day = 'Saturday' then 6 
       when day = 'Sunday' then 7 
      end) 

또는, 당신은 뭔가를 할 수 있습니다

이것은 SQL Server 구문입니다. 날짜 부분은 ..... 산술 0

+0

LogParser를 사용 중이며 LogParser에서 ORDER BY의 CASE 문을 수락 할 수 없도록 최선을 다했습니다. 나는 그것이 SELECT에서만 지원된다고 생각한다. 또한, 나는 그것이 datepart 함수를 지원한다고 생각하지 않는다. 두 가지 방법 모두에 대한 로그 파서의 오류 메시지는 다음과 같습니다.'오류 : 구문 오류 : : 유효하지 않은 ' –

+0

확실한 로그 파서의 ORDER BY는 CASE를 지원합니다. 2.2 확실히 그렇습니다. 구문 오류를 제공하는 전체 쿼리를 게시 할 수 있습니까? –

+0

안녕하세요. 나는 그 바보 같은 것을 쓴 사람에게 약간 바보 같은 질문을하지만, 여전히 오류가 발생하고 Log Parser 2.2를 확실히 사용하고 있습니다. 나에게 오류를주는 CASE 문으로 원래 게시를 편집했습니다. –

0

에 월요일을 이동하는 것입니다 2. 월요일 일요일 1과의 하루를 제공

` CASE Day WHEN 'Monday' THEN 1 
else CASE Day WHEN 'Tuesday' THEN 2 
else CASE Day WHEN 'Wednesday' THEN 3 
else CASE Day WHEN 'Thursday' THEN 4 
else CASE Day WHEN 'Friday' THEN 5 
else CASE Day WHEN 'Saturday' THEN 6 
else CASE Day WHEN 'Sunday' THEN 7 
END end end end end end end AS DayNumber` 

........

`Order by DayNumber` 
+0

코드 덤프 만 수행하면 안됩니다. 대답을 뒷받침하는 코드에 대한 설명을 포함 시키십시오. – rgettman