2017-01-15 11 views
1

私は検索しましたが、各質問の一意性により、私のデータセットのために「翻訳」するのが難しくなりました。各ユーザー番号の最新のレコード?

私は名前のテーブルAを持っている:サブセット示すデータとフィールドのでCLOGS17 :

SERIALNO EVDATE      SYSNO AREA USRNO 
4   2017-01-01 02:03:48.000 1  4  10 
4   2017-01-01 02:09:00.000 1  4  10 
4   2017-01-01 02:24:44.997 1  6  10 
4   2017-01-01 02:56:50.000 1  2  18 
5   2017-08-08 02:03:48.000 1  4  10 
5   2017-01-09 02:09:00.000 1  4  10 
6   2017-04-03 02:24:44.997 1  6  10 
8   2017-05-05 02:56:50.000 1  2  18 

私の目標は、のSerialNo + SYSNO + AREA + USRNOの組み合わせが持つすべてのレコードを取得することです過去30日間に使用されていない(非アクティブなユーザであるため)、そのUSRNOを削除することができます。上記のデータから

所望の出力は、(それぞれのSerialNo、SYSNO、AREAのための最新の記録、およびUSRNOの異なる組み合わせ)のようになります。

SERIALNO EVDATE      SYSNO AREA USRNO 
4   2017-01-01 02:09:00.000 1  4  10 
4   2017-01-01 02:24:44.997 1  6  10 
4   2017-01-01 02:56:50.000 1  2  18 
5   2017-08-08 02:03:48.000 1  4  10 
6   2017-04-03 02:24:44.997 1  6  10 
8   2017-05-05 02:56:50.000 1  2  18 

私は、最後の30日以内のものだけを取得することができています。

(「表B」)以下の表のデータが与えられると、それはすべての保存されたユーザのリストである:

SERIALNO CONTID SYSNO AREA USRID 
36   001  1  *  1 
36   001  1  *  18 
36   001  1  *  2 
36   001  1  *  29 
36   001  1  *  36 
36   001  1  1  10 

このテーブルは、システム内のすべてのユーザを含んでいます。

表Bから、特定のCONTID、SYSNO、AREAに使用されていないすべてのユーザーを返すにはどうすればよいですか?

答えて

1

あなたの質問の最初の部分については、それが目的のフィールド上の選択のgroup byとして最も簡単なようになります:

SELECT SERIALNO, 
     SYSNO, 
     AREA, 
     USRNO, 
     MAX(EVDATE) 
    FROM CLOGS17 
GROUP BY SERIALNO, 
      SYSNO, 
      AREA, 
      USRNO 

あなたは第二部について十分な情報を提供しなかったので。このクエリはあなたの質問に表示される出力を提供します。

したがって、30日間の条件(それが何であれ)を満たさないすべてのユーザーを取得するには、

のように上記のクエリのnullを求める上記のクエリを使用してユーザーテーブルの left joinを実行します。
SELECT * 
    FROM tableb tb LEFT JOIN 
    (SELECT SERIALNO, 
      SYSNO, 
      AREA, 
      USRNO, 
      MAX(EVDATE) 
     FROM CLOGS17 
     GROUP BY SERIALNO, 
       SYSNO, 
       AREA, 
       USRNO) a 
      ON tb.SERIALNO = a.SERIALNO, 
      AND tb.SYSNO = a.SYSNO 
      AND tb.USRNO = a.USRNO 
    WHERE a.AREA is null 
+0

ありがとうございます。私はOPにいくつかの情報を追加しました。ですから、あなたの質問はちょっと役立ちます - それは過去30日間に(私が30日のフィルターコードを加えた後に)使われたすべての組み合わせを返します。すべてのユーザーの組み合わせを格納する、今提供されている表データを使用して、使用されていないものをすべて取得するにはどうすればよいですか。 –

+0

編集して、お客様のニーズを満たしているかどうかを確認してください。ああ、それは私の最後(午前4時)にここで遅いです、私は今寝るつもりです。何か問題があれば、私は後でそれを見るでしょう。 –

関連する問題