最後の一致より前の10日からすべての行を取得しようとしていますproperty_id。DATE_SUB()とMIN()の問題
以下のクエリは、私が思い付いたものですが、HAVEINGの部分が機能していません。
SELECT *
FROM tab t
WHERE t.property_id=1
GROUP BY t.property_id
HAVING t.creation_date BETWEEN DATE_SUB(MIN(t.creation_date), INTERVAL 10 DAY) AND MIN(t.creation_date)
ORDER BY t.creation_date DESC
それは日付をチェックせずPROPERTY_IDに一致するすべての行を返します。最初は私がHAVINGが無視されたと思っていましたが、いくつかのテストの後で、私はそのエラーが本当にその行の中にあることに気付きました。
私は私のクエリを変更することで見ることができたとして、以下のテストが完全に働いた:
HAVING t.creation_date BETWEEN DATE_SUB('2017-05-29 00:00:00', INTERVAL 10 DAY) AND '2017-05-29 00:00:00'
をこの1あまりにも:
HAVING t.creation_date BETWEEN DATE_SUB('2017-05-29 00:00:00', INTERVAL 10 DAY) AND MIN(t.creation_date)
ではなく、これを:
HAVING t.creation_date BETWEEN DATE_SUB(MIN(t.creation_date), INTERVAL 10 DAY) AND '2017-05-29 00:00:00'
ので、結論として、私は部分を作ると思う。HAVING encoun TERSのトラブルがある:
DATE_SUB(MIN(t.creation_date), INTERVAL 10 DAY)
- どのようにその部分は私ががは役に立たないHAVING作ることができますか?
- なぜ私はDATE_SUB()とMIN()を一緒に使うことができないのでしょうか?
- もしそうなら、その制限をバイパスする方法はありますか?
SELECT * FROM table t INNER JOIN ( SELECT MAX(creation_date) AS early_date FROM table t WHERE t.property_id=1 ) AS sub WHERE t.property_id= 1 AND t.creation_date BETWEEN DATE_SUB(sub.early_date, INTERVAL 60 DAY) AND sub.early_date
I:
EDITその答えは
まあscaisEdgeの答え以下、そして私の部分からの変更のビットは、私にとって理想的なMySQLのコードは以下のとおりです。まだがであるような行動を取っていた理由を理解するにはまだ何らかの問題があります。
残念ながら、事前計算された値の間で使用していない、それはt.propertyまたはBETWEENを確認せず、私のすべての行を取得します。 – DuffautM
creation_date列はどのような種類のデータですか? – scaisEdge
タイムスタンプの列 – DuffautM