2017-12-13 10 views
0

明確化。私は最新のタイムスタンプを持つ行を見つけ出すクエリを持っていますが、その行に1に設定された列が削除されている場合は、NULLを戻したいと思います。それが私がやろうとしていることです。SQLの条件がある場合

私はサブクエリでクエリをしたいと思いWHERE句のようなもの:

SELECT * 
FROM table 
WHERE id = (SELECT id FROM table WHERE ts > 'x' ORDER BY ts LIMIT 1) 

しかし、事がテーブル内のDELETEDという列があり、かつDELETED = 1場合、私はちょうどこれを取得したいです

SELECT * 
FROM table 
WHERE id = NULL 

どうすればいいですか?

私はMariaDBで作業していますが、どのSQLでも役立ちます。

+0

タグあなたが(例えばMySQLやPostgreSQLのは、Oracleを使用しているDBMS製品を、MS SQL Server ...など) "SQL"は特定のデータベース製品の名前ではなく、クエリ言語です – Valerica

+0

質問を編集し、サンプルデータと望ましい結果を提供します。それはすべての行の値を持っているので、あなたの説明は意味をなさない。 –

+0

利用可能なデータと望ましい結果を追加することができればよい。 –

答えて

0

私はこれがあなたの質問に関連しているとは思いませんが、なぜ同じようにクエリを実行していない:それは、クエリのバージョンよりも簡単そうです

SELECT t.* 
FROM table t 
WHERE t.ts > 'x' 
ORDER BY t.ts 
LIMIT 1; 

からidがで一意であることを仮定して表。

+0

'id'が' table'で一意でない場合は違いがあります。 –

1

"DELETED"の結果がある場合は、そのことを希望します。そうでなければxより大きいtsの行が必要です。 DELETEDは0 1でない場合である」と仮定すると、あなたはこのようゴードンズSQLを使用することができます。

SELECT t.* 
FROM table t 
WHERE (t.ts > 'x' or t.deleted = 1) 
ORDER BY t.deleted desc, t.ts 
LIMIT 1; 
+0

"id"が一意でない場合は、サブクエリにOR句を挿入します –

0

チェックこの1:

SELECT * 
FROM table 
WHERE id = (SELECT id FROM table WHERE ts > 'x' ORDER BY ts LIMIT 1) 
AND deleted = 0; 
関連する問題