0

さまざまなデータを選択して平均化し、時間ごとにグループ化する一連のレコードがあります。744レコードを問題なく取得しているので、この関数/クエリは平均化の優れた仕事をしているようです。ただし、6月8日から6月16日までは、平均化とグループ化をスキップしているようです。データと同じくらい膨大な量であるため、これが発生する可能性のある理由を見つけようと試みました。これらの行のデータは他の行のデータと変わらないようで、6月8日から6月16日までレコードをスキップする理由はないはずです。NULLSがありますが、AVGはこのデータをスキップするだけだと思います?特にAVGおよびGROUPBY関数に関連するため、レコードをスキップするこの特定のパターンを見た人はいますか?

日付形式:YYYY-MM-DD HH:MM:SS.000 DBマネージャー:MicrosoftCorporationによるSQLServer Management Studio

作業データリンク(このデータは適切に平均化されました): https ://docs.google.com/spreadsheet/ccc?key = 0Av--kLXVY_a3dHA5UjBKYXc3UmRhQW9RN0NGbXl1NHc

動作しないデータリンク(このデータは何らかの理由で完全にスキップされました): https ://docs.google.com/spreadsheet/ccc?key = 0Av--kLXVY_a3dFZqX3RuYVNWYWpVemNmSS12bzhIOXc

平均化とgroupbyに使用されるクエリ:

`INSERT INTO AverageRawData(DateTime,
SCR1_EXHAUST_GAS_TEMP,SCR1_NOX_LEVEL,SCR1_NH3_FLOW_RATE,SCR1_O2_LEVEL,SCR1_NOx,
SCR2_EXHAUST_GAS_TEMP,SCR2_NOX_LEVEL,SCR2_NH3_FLOW_RATE,SCR2_O2_LEVEL,SCR2_NOx,
SCR3_EXHAUST_GAS_TEMP,SCR3_NOX_LEVEL,SCR3_NH3_FLOW_RATE,SCR3_O2_LEVEL,SCR3_NOx,
SCR4_EXHAUST_GAS_TEMP,SCR4_NOX_LEVEL,SCR4_NH3_FLOW_RATE,SCR4_O2_LEVEL,SCR4_NOx,
CAT1_FUEL_FLOW_RATE,CAT2_FUEL_FLOW_RATE,CAT3_FUEL_FLOW_RATE,
VOLVO1_FUEL_FLOW_RATE,VOLVO2_FUEL_FLOW_RATE,VOLVO3_FUEL_FLOW_RATE,VOLVO4_FUEL_FLOW_RATE,VOLVO5_FUEL_FLOW_RATE,
TOTAL_NOx)

SELECT MIN(DateTime),
AVG(Convert(decimal(10,3),SCR1_EXHAUST_GAS_TEMP)),
AVG(Convert(decimal(10,3),SCR1_NOX_LEVEL)),
AVG(Convert(decimal(10,3),SCR1_NH3_FLOW_RATE)),
AVG(Convert(decimal(10,3),SCR1_O2_LEVEL)),
AVG(Convert(decimal(10,3),SCR1_NOx)),
AVG(Convert(decimal(10,3),SCR2_EXHAUST_GAS_TEMP)),
AVG(Convert(decimal(10,3),SCR2_NOX_LEVEL)),
AVG(Convert(decimal(10,3),SCR2_NH3_FLOW_RATE)),
AVG(Convert(decimal(10,3),SCR2_O2_LEVEL)),
AVG(Convert(decimal(10,3),SCR2_NOx)),
AVG(Convert(decimal(10,3),SCR3_EXHAUST_GAS_TEMP)),
AVG(Convert(decimal(10,3),SCR3_NOX_LEVEL)),
AVG(Convert(decimal(10,3),SCR3_NH3_FLOW_RATE)),
AVG(Convert(decimal(10,3),SCR3_O2_LEVEL)),
AVG(Convert(decimal(10,3),SCR3_NOx)),
AVG(Convert(decimal(10,3),SCR4_EXHAUST_GAS_TEMP)),
AVG(Convert(decimal(10,3),SCR4_NOX_LEVEL)),
AVG(Convert(decimal(10,3),SCR4_NH3_FLOW_RATE)),
AVG(Convert(decimal(10,3),SCR4_O2_LEVEL)),
AVG(Convert(decimal(10,3),SCR4_NOx)),
AVG(Convert(decimal(10,3),CAT1_FUEL_FLOW_RATE)),
AVG(Convert(decimal(10,3),CAT2_FUEL_FLOW_RATE)),
AVG(Convert(decimal(10,3),CAT3_FUEL_FLOW_RATE)),
AVG(Convert(decimal(10,3),VOLVO1_FUEL_FLOW_RATE)),
AVG(Convert(decimal(10,3),VOLVO2_FUEL_FLOW_RATE)),
AVG(Convert(decimal(10,3),VOLVO3_FUEL_FLOW_RATE)),
AVG(Convert(decimal(10,3),VOLVO4_FUEL_FLOW_RATE)),
AVG(Convert(decimal(10,3),VOLVO5_FUEL_FLOW_RATE)),
AVG(Convert(decimal(10,3),TOTAL_NOx))
FROM jmusa_LOG1
GROUP BY DATEPART(DD,DateTime),DATEPART(HH,DateTime)`
4

1 に答える 1

1

Oracle DB で作業していると仮定して、データが表示されないすべての列で NVL(R1_EXHAUST_GAS_TEMP,0) を実行してみてください。

これはdocs.oracleからのものです:

COUNT(*) と GROUPING を除くすべての集計関数は、NULL を無視します。集約関数への引数で NVL 関数を使用して、null を値に置き換えることができます。COUNT は null を返すことはありませんが、数値またはゼロを返します。残りのすべての集計関数について、データ セットに行が含まれていない場合、または集計関数への引数として null を持つ行のみが含まれている場合、関数は null を返します。

彼らが示唆するように、NVLを使用すると問題が解決するはずです。

リンク: http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions001.htm

于 2012-07-05T21:17:19.090 に答える