1

ここでは、解決できないように見える非常に些細な問題です。電話システムの 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)
4

2 に答える 2

0

.....

`   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`
于 2013-10-02T22:37:05.243 に答える
0

次のように並べる必要があります。

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)

または、データベースに曜日関数がある場合は、次のようにすることができます。

order by (datepart(day, <date>)+5)%7

これは SQL Server の構文です。datepart は、日曜日に 1、月曜日に 2 を指定します。演算は、月曜日を 0 にシフトするだけです。

于 2012-07-12T13:22:51.597 に答える