0

mysql指定された日付までに特定のデータを取得するのに役立つこのクエリがあります。

SELECT id FROM mytable WHERE DAY(idate)='11' AND MONTH(idate)='01' AND YEAR(idate)='2013' GROUP BY id

指定された日付と指定された日付以外のデータからデータを取得したいので、このクエリを試してみましたが、結果はゼロです。

SELECT id FROM mytable WHERE DAY(idate)='11' AND DAY(idate)<>'11' AND MONTH(idate)='01' AND YEAR(idate)='2013' GROUP BY id
4

4 に答える 4

1

あなたのSQL:

SELECT id FROM mytable WHERE DAY(idate)='11' AND DAY(idate)<>'11' 
                       AND MONTH(idate)='01' AND YEAR(idate)='2013' GROUP BY id

「日が11に等しく、11に等しくないmytableから行のIDを選択してください...」と言っています。

これは不可能な状況であるため、何も得られません。

実際に必要なのは、「日が11に等しいmytableの行と、日付が11に等しくない行のIDを選択する...」だと思います。これは、「日付の値に関係なく、mytableから行のIDを選択する...」と同じです。または:

SELECT id FROM mytable WHERE MONTH(idate)='01' AND YEAR(idate)='2013' GROUP BY id
于 2013-01-20T14:21:44.090 に答える
0

OR代わりに試してくださいAND

SELECT id 
FROM mytable t1
WHERE DAY(idate)<>'11'
  OR ( DAY(idate) = '11' 
      AND MONTH(idate)='01' 
      AND YEAR(idate)='2013' 
    )
GROUP BY id
于 2013-01-20T14:19:11.747 に答える
0

最初のクエリを使用して、クエリされたテーブルから減算するか、クエリを修正することができます(ドモルガンの法則について読んでください)。

SELECT id
    FROM mytable 
         WHERE DAY(idate)<>'11' OR MONTH(idate)<>'01' OR MONTH(idate)='01' OR YEAR(idate)='2013'
 GROUP BY id
于 2013-01-20T14:21:22.620 に答える
0

現時点でのクエリには、基本的にこれがWHERE句として含まれています。

where 1 = 1
and   1 <> 1

明らかに、両方が真になることはありません。同様に、上のフィルターDAY(idate)は相互に排他的です。あなたが達成しようとしていることを正確に理解することは困難です。おそらく、DAY()のテストを完全に削除する必要がありますか?

SELECT id 
FROM mytable 
WHERE MONTH(idate)='01' 
AND YEAR(idate)='2013' 
GROUP BY id
于 2013-01-20T14:22:45.897 に答える