現在、次のコードに取り組んでいます。
for (double i = 0.00; i < 5; i += 0.01)
{
cmd.CommandText = "SELECT " +
"COUNT(DISTINCT(ActualAFR)) " +
"FROM tblBaseLog AS tBL " +
"INNER JOIN tblSettings AS tSET " +
"ON tBL.RPM = tSET.RPM " +
"WHERE MAFVoltage = " + i + " AND " +
"(tBL.AccelPedalPos > tSET.APPTransition OR " +
"tBL.CalculatedLoad > tSET.LoadTransition)";
int trimCount = Convert.ToInt32(cmd.ExecuteScalar().ToString());
私が抱えている問題は、クエリの最後の行での WHERE 句の比較 (具体的には tBL.CalculatedLoad > tSET.LoadTransition) に固有のものです。
このクエリは、既存のデータ セットから 1 つの結果を返します。この結果は正しいですが、期待される完全なデータ セットではありません。
オペランドを (より大きいからより小さいに) 反転すると、期待されたが検証されていない結果 (基本的には多数のデータ ポイント) が得られます。
最も奇妙なのは、より高い値 (for double i = 4.00;... など) で for ループ アウトを開始すると、以前よりも多くの結果が得られることです。
何が起こっているのかを明確にしたので、使用されているデータベースの構造/内容に関する関連情報を次に示します。
すべてのテーブル データ型は、単純な INTEGER である RPM を除いて REAL に設定されます。
tBL.AccelPedalPos > tSET.APPTransition の結果が true として返されることはありません (質問しないでください。現時点では問題ではありません。クエリから削除したため、役に立ちませんでした)。
tSET.LoadTransition の値は、ログの初期の 1.1 を除いて、ほぼ常に 1 です。
tBL.Calculated Load の値は 0.2 から 2 の間で変化し、比較対象となるフラットな 1.0 よりも大きい数百回の 10 進数値の反復があります。
おそらく、私が見逃しているのはとてつもなく単純なことですが、クエリを数十回書き直した後、私は壊れて、ここで助けを求めています.
また、私のコンピューターには「修正された」AMD TLB バグ プロセッサの 1 つが搭載されていることにも注意してください。ただし、Core 2 Duo を実行しているラップトップでアプリのコンパイル済みバージョンをテストしたところ、まったく同じ結果が得られました。
任意の入力をいただければ幸いです。