2017-03-15 12 views
1

私はAccessで作成したいこのクエリで誰かが私を助けてくれることを願っています。私は3つの列と値の列を持つテーブルを持っています。 B2C/SI_01/INP01の場合、タイムスタンプの異なる4つのバージョンがあります。どのように私はサブクエリを使用して、B2C/SI_01/INP01の組み合わせの "前回の"タイムスタンプをクエリできますか?私は上位n-2と数回試してみましたが、ソート順は降順で、最大タイムスタンプは好きではありませんが、正しいsqlを取得しないようです。SQLサブクエリアクセス - 最後の1つ前

enter image description here

これまでのところ私に私のコードは次のとおりです。事前に

SELECT [N-1], SI_Initiative, LineCode, Timestamp 
FROM TBL_VC_DATA t1 
WHERE t1.Timestamp = 
    (SELECT Max(t2.Timestamp) 
    FROM TBL_VC_DATA t2 
    WHERE t2.timestamp<>t1.timestamp 
    AND t2.[N-1]=t1.[N-1] 
    AND t2.SI_Initiative=t1.SI_Initiative 
    AND t2.LineCode=t1.LineCode); 

おかげで、

ミシェル

+0

それはあなたが同じN1、イニシアティブおよび回線コードを持つ複数のレコードに同じタイムスタンプを持っていないことを、データベースにデータが取り込まれますように、保証されていますか? – SunKnight0

答えて

1

一つのオプションは、クエリでTOP 2を使用することです、で降順にソートタイムスタンプを作成し、最大(最後)のタイムスタンプレコードを除外します。

SELECT TOP 2 [N-1], SI_Initiative, LineCode, Timestamp 
FROM TBL_VC_DATA t1 
WHERE t1.Timestamp <> (SELECT MAX(t2.Timestamp) 
         FROM TBL_VC_DATA t2 
         WHERE t2.timestamp <> t1.timestamp AND 
          t2.[N-1] = t1.[N-1] AND 
          t2.SI_Initiative = t1.SI_Initiative AND 
          t2.LineCode = t1.LineCode) 
ORDER BY t1.Timestamp DESC 

に関しては、最後と最後から2番目のレコードの間の時間がなければならない、それは上記のクエリが両方レコードを返すことができますので、WHERE t2.timestamp <> t1.timestampのサブクエリのWHERE句のあなたのほかには、良いですタイムスタンプ値。

0

ありがとうございますが、クエリは機能しますが、完全に私が望むものは表示されません。 [N-1]分野のB2C以外にも、SIイニシアチブとラインコードを持つ他の部門もあります。これらの他の部門もクエリに含める必要があります。

基本的にN-1のすべての部門について、すべてのSI_initiativeと広告申込情報の組み合わせを表示する必要があります(前回のタイムスタンプを照会する必要があることを考慮して)。私はどこを、次に内側の結合を置き換えるべきですか?

よろしく、

ミシェル

関連する問題