のようなテーブル
datetime a1 b1 x2 ...
07-01-2009 13:10 8 9 10
07-01-2009 13:11 8 8 2
07-01-2009 13:12 9 1 1
1日1秒あたり1行(= 86400行)。〜40列; すべて同じ形式
私は、列が指定する最大値と時間を取得する方法を探しています。
時間枠内で指定する列の最大値とそれに応じた時間を取得する方法を探しています。
何かのようなもの
Select top 1 time,a1 from table
where (datetime>=begin and datetime<end)
order by a1 desc
動作しますが、列をパラメーターとして使用できません。
LINQソリューションまたはSPが最適です。
最大値を取得するためにデータセット全体を並べ替えるときにパフォーマンスを心配する必要がありますか?たぶんMAX関数はもっと速くなるでしょう。
アップデート
Timothy(tvanfossen)が提案したように、動的なlinqの方法で実装しようとしました
Dim q2 = context.table _
.Where("t >= @0 AND t < @1", begin, end) _
.OrderBy("@0 desc", col) _
.Take(1) _
.Select(col)
ただし、これはテーブルの最初の値を返します。これは、最大値ではなく、時間枠の最初の値を返します。SQLプロファイラーを見ると、ORDER句がないことがわかります。
何か案が?
UPDATE 2
何らかの理由で、置換値がorderby句で機能しません。
.OrderBY(col + "desc")は機能します