0

与えられたテーブル

{ID, Code, OffSet, Amount},
{1, 1, 1, .30}
{2, 1, 2, .45}
{3, 1, 3, .50}
{4, 2, 1, .26}

正確なオフセットがわかっていれば、簡単にクエリを実行できます。しかし、オフセットがテーブルに含まれていない場合はどうなりますか?結合を使用して、特定のコードの最後の有効なレコードを返すクエリを取得するにはどうすればよいですか?

たとえば、クエリにコード=1およびオフセット=4が含まれている場合、ID3のレコードから.50の量を返す必要があります。

SELECT T1.Account, T2.Amount
  FROM Table1 T1
  LEFT JOIN Table2 T2 on T2.Code = T1.Code and T2.Offset = 4  --?? What goes here??
 WHERE T1.Account = 'ABCD'

MSSQL2008R2を使用しています。

ありがとう。

4

2 に答える 2

0

特定のコードの最後の有効なレコードを返すクエリを取得するにはどうすればよいですか?

SELECT TOP 1 * FROM MyTbl WHERE Code = 1 AND OffSet <= 4 ORDER BY OffSet DESC

IDフィールドが自動インクリメントであると仮定します。

于 2012-12-15T00:36:10.183 に答える
0

ここであなたのIDは一意であり、新しいレコードが挿入されたときに既存のIDよりも大きいと仮定します..

そのため、上位 1 レコードを使用してそのレコードを簡単にフェッチし、id desc で並べ替えることができます。クエリを使用してそれを解決しています

SELECT T1.Account, T2.Amount
  FROM Table1 T1
  LEFT JOIN Table2 T2 on T2.Code = T1.Code and T2.Offset = 4  
 WHERE T1.Account = 'ABCD' order by T1.Id desc Limit 1

注:topはsqlサーバーで使用され、limitはmysqlで使用されます

于 2012-12-15T13:14:07.407 に答える