2017-02-03 11 views
0

から最新のエントリを選択します。私は次のようにおよそSQLテーブルを持って、各列

id | timestamp | position | size | level 
  • idは、主キーであり、常に値
  • timestampは、数値時刻表現
  • である必要がありますposition,およびlevelのいずれかの値がnullである可能性があります。

私は、それが属する行のタイムスタンプによって決定されるように、最新の非ヌル位置、サイズ、およびレベルを取得するクエリを実行したい。

どうすればよいですか?あなたが値を探している場合

SELECT MAX(timestamp) FROM yourTable WHERE position IS NOT NULL AND 
              size IS NOT NULL AND 
              level IS NOT NULL 
+2

データベースにタグを付け、試行を投稿してサンプルデータを表示してください。 –

+0

...そして望ましい結果 –

+0

それはどういう意味ですか? – rygo6

答えて

1

:最大タイムスタンプを発見したときにもsizelevelの列の非NULL値を強制したい場合

3
SELECT t.* 
FROM yourTable t 
WHERE t.timestamp = (SELECT MAX(timestamp) FROM yourTable WHERE position IS NOT NULL) 

は、あなたの代わりに、次のサブクエリを使用することができます異なる行は、あなたが行うことができます。

select (select position 
     from t 
     where position is not null 
     order by timestamp desc 
     fetch first 1 row only 
     ) as position, 
     (select size 
     from t 
     where size is not null 
     order by timestamp desc 
     fetch first 1 row only 
     ) as size, 
     (select level 
     from t 
     where level is not null 
     order by timestamp desc 
     fetch first 1 row only 
     ) as level; 

注:これは、 (ほとんど完全に)標準SQLを使用します。正確な構文は、使用しているデータベースによって異なる場合があります。

+0

IS NOT NULLを持つそれぞれの名前を指定しなくても、すべての列を返すようにしてもらえますか – rygo6

+0

If 3つの列がすべてNULLでないことを確認したい場合は、このチェックが必要です。あなたはどう思いますか? –

関連する問題