2016-06-13 4 views
1

2つのテーブルを持つデータベースがあり、各アイテムの最新コストを返すための簡単なクエリを作成しようとしています。MS最近の日付のみを選択するクエリにアクセスする

サンプル:

ID、名前、費用、効力発生日

1 ...アイテム1 ... 5 ... 7/1/16

2 ...アイテム1 ... 4 ... 6/1/16

3 ...アイテム2 ... 6 ... 8/1/16

4 ...アイテム1 ... 2 ... 9/1/16

3行目(Item2)と4行目(Item1の最新)のみを返します。

アクセスインターフェイスを使用すると、私はコストをまったく含まない場合にのみ機能するようになりましたが、Access freaking outなしでGROUP BY行からコストを削除することはできません。どんな助けもありがとう!

SQLビュー:

SELECT Item.Item_ID, Item.Item_Name, Rate_Changes.Cost, Max(Rate_Changes.Effective_Date) As MaxOfEffective_Date 
FROM Item INNER JOIN Rate_Changes ON Item.Item_ID = Rate_Changes.Item_ID 
WHERE Item.Active=True 
GROUP BY Item.Item_ID, Item.Active, Item.Item_Name, 
Rate_Changes.Cost, Rate_Changes.Effective_Date 

答えて

1

ここでは一つの方法である:

SELECT i.Item_ID, i.Item_Name, rc.Cost, rc.Effective_Date 
FROM Item as i INNER JOIN 
    Rate_Changes as rc 
    ON i.Item_ID = rc.Item_ID 
WHERE i.Active = True AND 
     rc.Effective_Date = (SELECT MAX(rc2.Effective_Date) 
          FROM Rate_Changes as rc2 
          WHERE rc2.Item_Id = i.Item_id 
         ); 

これは、指定されたアイテムの重複効果的な日付が存在しないことを前提としています。

EDIT:あなたは重複を持っている場合は

、あなたが行うことができます:

SELECT i.Item_ID, i.Item_Name, rc.Cost, rc.Effective_Date 
FROM Item as i INNER JOIN 
    Rate_Changes as rc 
    ON i.Item_ID = rc.Item_ID 
WHERE i.Active = True AND 
     rc.Effective_Date = (SELECT TOP 1 rc2.Effective_Date 
          FROM Rate_Changes as rc2 
          WHERE rc2.Item_Id = i.Item_id 
          ORDER BY rc2.Effective_Date DESC, rc2.id DESC 
         ); 
+0

私の限られたサンプルデータから正常に動作します、ありがとう!私は、特定のアイテムの有効期限が重複してはならないと確信しています。これを強制する方法はありますか?私はアクセスするのが事実上全く新しいので、私はまだコマンドについてぼやけている。 – rgdhndho

+0

@ rgdhndho。 。 。 'id'が日付と共に増加するならば、' effective_date'の代わりに 'id'を使うことができます。 –

+0

IDはプライマリキーなので、ユニークです。私はあなたがどういう意味かはっきりしていません。私は各商品IDの最新の価格(最大有効日)を表示するようにしたいと思います。 ID(Rate_Changeテーブルの主キー)をグループ化するためにどのように使用できますか?私はあなたの代わりのコードを試して、クエリが多くても1つの結果を返すという警告で終わった。私はちょうど代わりにOrder By rc.Item_IDを投げた、それは私が言うことができるものからうまく動作しています。提案していただきありがとうございます! – rgdhndho

関連する問題