2009-05-19 11 views
3

Microsoft Accessで分析されたテーブルを使用しています。このフィールドには多くのフィールドがありますが、この場合フィルタリングに使用される3つのフィールドはanalyze.readings_miu_id、analyze.ReadDate、analyze.ReadTimeです。 readings_miu_idがまとめてグループ化され、ReadDateでソートされているがReadTimeの最高値の時刻である可能性がある前記日付の最後のエントリのみを表示する「分析済み」テーブルからレコードを取り出す必要があります。私は、クエリを作成しました:MS ACCESSのサブクエリ:日付ごとに「人」あたり1レコードを選択する

SELECT readings_miu_id, Reading, ReadDate, ReadTime, 
    MIUwindow, SN, Noise, RSSI, OriginCol, ColID, Ownage 
FROM analyzed 
WHERE analyzed.ReadDate Between #4/21/2009# and #4/29/2009# 
AND analyzed.ReadTime= ( 
    SELECT TOP 1 analyzed.ReadTime 
    FROM analyzed 
    WHERE analyzed.readings_miu_id = *????*** 
    ORDER BY analyzed.ReadTime DESC); 

* ???? ***私は私は1つのレコードを取得し、有効なreadings_miu_idに入力した場合は、ここ

を入れてわからないことイムを表示するために使用されていますreadings_miu_idのための最も高い時間と。

ReadDateごとにreadings_miu_idごとに最後のReadTimeだけを取得するには、上記のようなサブクエリを使用するにはどうすればよいですか?

をreadings_miu_idこれはあなたが近づきます商品番号や名前

+0

誰かがなぜ私がダウン投票されているのか教えていただけますか?私の質問に問題があるのですか、単に「批評家」バッジを取得しようとしていた人ですか? – Bryan

答えて

4
SELECT readings_miu_id 
    , Reading , ReadDate , ReadTime 
    , MIUwindow, SN, Noise, RSSI 
    , OriginCol, ColID, Ownage 
FROM analyzed AS A 
    WHERE analyzed.ReadDate Between #4/21/2009# and #4/29/2009# 
     AND analyzed.ReadTime= 
      (SELECT TOP 1 analyzed.ReadTime FROM analyzed 
      where analyzed.readings_miu_id = A.readings_miu_id 
       AND analyzed.ReadDate = A.ReadDate 
      ORDER BY analyzed.ReadTime DESC); 

私はAのようにメインテーブルをエイリアスだけサブクエリでそれに参照さ。サブクエリでReadDateでフィルタリングする必要があるかどうかは不明です。

+0

これは私があなたに感謝のために探していたものです。私はあなたがSQLの行を参照するクロスリファレンスのようなテーブルのコピーを作成することができるかどうかはわかりませんでした。ありがとう – Bryan

+0

+1すべての後に良いクエリ:) – Andomar

+0

私の友人から少し助けを得ました。 – JeffO

0

に似ている、テーブルのIDではありません。 "どこにreadings_miu_idがグループ化されているか"というステートメントは私を混乱させます。そのフィールドにGroupByまたはソートが必要かどうかはわかりません。このクエリは、分析されたテーブルから、日付が同じで、指定された日付の「最大:」時間のレコードを提供します。それはあなたが望んだような音です。

SELECT readings_miu_id, Reading, ReadDate, ReadTime, MIUwindow, SN, Noise, RSSI, OriginCol, ColID, Ownage 
FROM analyzed , 
(
    Select ReadDate as matchDate, Max(ReadTime) as matchTime 
    FROM analyzed 
    Where analyzed.ReadDate Between #4/21/2009# and #4/29/2009# 
    Group by ReadDate 
) dateAndTime 
WHERE analyzed.ReadDate Between #4/21/2009# and #4/29/2009# AND ReadDate = dateAndTime.matchDate AND readTime = dateAndTime.matchTime 
Order By readDate 
+0

私は、トップ1が最新のリードタイムを取得する必要があると思います。 – JeffO

+0

ここでmax()はReadDateグループごとに1行を取得します。 – Andomar

+0

次に、ReadDateをサブクエリのwhere句に含めるだけです。 – JeffO