ここでは、解決できないように見える非常に些細な問題です。電話システムの CSV ログ ファイルを分析するために LogParser を使用しています。曜日ごとにグループ化された、2 つの日付間のすべての着信通話のグラフを作成しようとしています。私はこれを達成しましたが、グラフが月曜日から正しい順序で列を表示するのに苦労しています。LogParser に渡す SQL クエリは次のとおりです。
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 ステートメントがまったくなくても正しい順序で出力されますが、最初の列は常に日付範囲が始まる日であると思いますが、グラフを簡単に比較するために、常に月曜日にしたいと思います。現在起こっていることは、ログ ファイルのタイムスタンプを (出力目的で) 曜日の文字列表現に変換することです。私が知る限り、「Monday」が「火曜日」など。私の本能は、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)