2017-08-21 5 views
0

私の問題はこれに関連しています。すでにQuestionを解決しましたが、うまく動作しません。MySQL:AND +パラメータを選択してスキップする問題

このクエリは、最初に 'type'列をフィルタリングし、次に 'lastChange'列の最小タイムスタンプをフィルタリングする必要があります。タイムスタンプは頻繁に更新されます。

SELECT * FROM api 
WHERE (type = 'Public') AND (lastChange = (SELECT MIN(lastChange) FROM api)); 

type = 'Private'を保持する行に到達すると、結果が空になるため、値をフィルタリングするように見えます。

type != 'Public' // doesn't work either, because I have more than two values 

しかし、クエリが実際にタイプ=「公開」を開催し、唯一の肯定的な結果でのみのものを返さないすべての行をスキップするべきではありません - どのように私はこれを適切に達成することができますか?

+2

最新のものを探したいのであれば、 'WHERE \ 'type \' =' Public 'ORDER BY lastChange desc LIMIT 1'が動作するはずです。それはMySQLの特別な言葉であるので、 'type'についてのバッククォートに注意してください。 – aynber

+0

私は上記のコメントを十分にupvoteできません。これは、この問題を解決する方法です。*および*あなたのクエリで予想されるエラーに関するプロのヒントが含まれています。 –

+2

@aynberそれは唯一のキーワードhttps://dev.mysql.com/doc/refman/5.7/en/keywords.htmlであり予約されていないので、 'TYPE'をチェックする必要はありません。それの隣に '(R)'はありません。 –

答えて

1

あなたの選択はすべてのレコードに対して最低1つのvalieを返すが、Publicタイプに対してのみMIN値が必要なので、クエリで指定する必要があります。

SELECT * FROM api 
WHERE (type = 'Public') 
AND (lastChange = ( 
    SELECT MIN(lastChange) 
    FROM api AS t2 
    WHERE t2.type = "Public" 
    ) 
); 
+1

するかしないか、「試行」はありません。 ***良い答え***は、何が行われたのか、それがなぜOPのためだけでなく、将来の訪問者のためにそうした方法で行われたのかについての説明を常に持っています。 –

関連する問題