2017-08-23 3 views
0

の最新のレコードを取得します。私はこのクエリを持っている各TIMESTAMP

SELECT TIMESTAMP, 
     TIMESTAMP_OFFER, 
     TIMESTAMP_TRACK, 
     STATUS_ACPT 
FROM TABLE1 
WHERE TIMESTAMP IN 
(
    SELECT TIMESTAMP 
    FROM TABLE2 
    WHERE STATUS = '1' 
    AND TIMESTAMP_PROCESSED BETWEEN 
      '2017-01-07-00.00.00.000000' 
     AND '2017-01-17-00.00.00.000000' 
) 

そして結果:

--------------------------------------------------------------------------------------------------------- 
    | TIMESTAMP     | TIMESTAMP_OFFER    | TIMESTAMP_TRACK   | STATUS_ACPT | 
    --------------------------------------------------------------------------------------------------------- 
    |2017-01-09 11:26:29.434254 | 2017-02-01 16:05:02.221179 | 2017-07-13 10:59:20.342584 | E   | 
    --------------------------------------------------------------------------------------------------------- 
    |2017-01-11 15:09:51.935322 | 2017-02-11 12:00:50.410959 | 2017-02-11 12:10:50.410959 | A   | 
    --------------------------------------------------------------------------------------------------------- 
:私は、各TIMESTAMPの最新のレコードが必要です

--------------------------------------------------------------------------------------------------------- 
    | TIMESTAMP     | TIMESTAMP_OFFER    | TIMESTAMP_TRACK   | STATUS_ACPT | 
    --------------------------------------------------------------------------------------------------------- 
    |2017-01-09 11:26:29.434254 | 2017-01-25 14:36:23.587199 | 2017-01-25 14:36:23.587199 | P   | 
    --------------------------------------------------------------------------------------------------------- 
    |2017-01-09 11:26:29.434254 | 2017-02-01 16:05:02.221179 | 2017-02-01 16:05:02.221179 | P   | 
    --------------------------------------------------------------------------------------------------------- 
    |2017-01-09 11:26:29.434254 | 2017-02-01 16:05:02.221179 | 2017-07-13 10:59:20.342584 | E   | 
    --------------------------------------------------------------------------------------------------------- 
    |2017-01-11 15:09:51.935322 | 2017-02-11 12:00:50.410959 | 2017-02-11 12:00:50.410959 | P   | 
    --------------------------------------------------------------------------------------------------------- 
    |2017-01-11 15:09:51.935322 | 2017-02-11 12:00:50.410959 | 2017-02-11 12:10:50.410959 | A   | 
    --------------------------------------------------------------------------------------------------------- 

を、私はこれを取得する必要があります

どうすれば入手できますか?

ご覧のとおり、TIMESTAMPとTIMESTAMP_OFFERは重複する値を持つことができますが、TIMESTAMP_TRACKは一意です。あなたからとで最大値を必要とする各タイムスタンプ列のために1 - 共通テーブル式はrownumbersを追加するために使用され

with temp as (
select timestamp, timestamp_offer, timestamp_track, status_acpt, 
     row_number() over (order by timestamp desc) as rownum_timestamp, 
     row_number() over (order by timestamp_offer desc) as rownum_timestamp_offer 
    from table1) 
    select timestamp, timestamp_offer, timestamp_track 
    from temp 
    where rownum_timestamp = 1 or rownum_timestamp_offer = 1 

+0

詳細をお知らせください!なぜタイムスタンプが重複している他の行も同じように表示されるため、結果セットが表示されるとはっきりしないので、完全なビジネス要件が何であるかは明確ではありません。 – MichaelTiefenbacher

+0

@MichaelTiefenbacherの要件は、最新のTIMESTAMP_OFFERおよびTIMESTAMP_TRACKに基づいて、指定されたTIMESTAMPの結果を取得することです。 TIMESTAMP_TRACKはユニークなので、私は1つ(最新)のレコードしか取得できません。 – Foxy

+0

1)[タグ:group-n-per-group]問題の古典的な例。 2)[BETWEEN'を使用しないでください。](http://sqlblog.com/blogs/aaron_bertrand/archive/2011/10/19/what-do-between-and-the-devil-have-in-common。 aspx) - あなたは1/17の最初の瞬間を選択していますが、これはほとんどあなたが望むものではありません(はい、ポストはSQL Server用ですが、推論は普遍的です。分数秒を指定します)。 –

答えて

0

と仮定すると、TABLE1があなたの上に示した結果テーブルがこのクエリでそれを解決する可能性があります主SQL文はrownumber = 1の行のみが取り出されます。並べ替え順序に注意してください - それは降順ですので、rownumber 1が最大タイムスタンプです。

関連する問題