2011-08-02 10 views
0

これらの部分の周りにはSQLウィズスの子供がいます。SQL - 最新のものから*を選択してください。ただし、NULL以外の場合は最新のものを除きます。

Ref Book Amount Run_time Comment 
--- ------ ------ -------- ------- 
22 Book22 45  09:30 NULL 
23 Book23 34  09:30 Comment 
24 Book24 67  09:30 NULL 
25 Book25 57  09:30 NULL 
26 Book26 543 09:30 NULL 
23 Book23 34  10:00 NULL 
22 Book22 45  10:00 OK 
24 Book24 67  10:00 NULL 
25 Book25 57  10:00 NULL 

結果:

23 Book23 34  10:00 Comment 
22 Book22 45  10:00 OK 
24 Book24 67  10:00 NULL 
25 Book25 57  10:00 NULL 

添付として、私はテーブルを持っています。 Ref、Book、Amount & Run_timeを最新の実行(10:00)から選択したいだけですが、最新のコメントがあればそれも必要です。だから10時00分にはコメントがないかもしれないが、同じref、本などは前の実行からのコメントを持つだろう。これは複数の以前のコメントにも対処できなければなりません(つまり、午前6時から午後6時までの&午前7時と午前10時の間にコメントがありますが、最新のコメントからコメントを削除します)単にNULLを返した場合には、前回の実行。

希望、これは理にかなっている。

私は(マックスを使用して、最新の実行からすべてのフィールドを選択する最初の部分を得たが、入手可能な最新のコメントを統合することができませんでした。

任意のヘルプ、多くの感謝。

+1

なぜ2つの別々のテーブルを使用していませんか? ref、本、金額のあるもの。もう一方はref run_timeとコメント付きです。 –

+1

あなたの最初の部分を投稿してください。 –

+0

はい、私はどのように2つのテーブルが動作するかを見ています... –

答えて

1

Refとそれに関連するMAX(Run_Time) & MAX(Run_Time) for non-NULL Commentの値を元のテーブルから削除します。次に、その倍のリストに、元のテーブルを結合する:一度Commentを取得するにはRefBookAmountRun_Time、第二の時間を得るために:

SELECT 
    r.Ref, 
    r.Book, 
    r.Amount, 
    r.Run_Time, 
    c.Comment 
FROM (
    SELECT 
    Ref, 
    MAX(Run_Time) AS Run_Time, 
    MAX(CASE WHEN Comment IS NOT NULL THEN Run_Time END) AS Comment_Time 
    FROM tblTrades 
) m 
    INNER JOIN tblTrades r ON r.Ref = m.Ref AND r.Run_Time = m.Run_Time 
    LEFT JOIN tblTrades c ON c.Ref = m.Ref AND c.Run_Time = m.Comment_Time 
+0

私はそれを信じている - ありがとう!私はかなり理解していないので、私はいくつかのグーグルを行うだろうが、もう一度感謝.. –

1

あなたのために働くかもしれ別のアプローチがでサブクエリを追加することですリストを選択:

SELECT 
    REF, 
    Book, 
    Amount, 
    Run_Time, 
    (SELECT MAX(Comment) FROM tblTrades WHERE REF = t.Ref) as Comment 
FROM tblTrades t 
    WHERE Run_time=(SELECT MAX(Run_time) FROM tblTrades WHERE REF = t.Ref) 
関連する問題