1


0

DATETIMEフィールドがあります。 先週更新されたすべてのレコードを選択したいと思います。 今私はこのクエリを使っています:

time_sumからの合計としてのSUM(mins_spent)の選択どこlastUpdate> = '2008-12-22' AND lastUpdate <= '2008-12-28'

しかし、午後7時には17時間、午後11時には増加するはずですが、14時間になりますが、減少することはありません。 クエリを次のように変更することを考えていました。

time_sumとしてSUM(mins_spent)を選択します。どこからlastUpdate> = '2008-12-22 00:00:00'およびlastUpdate <= '2008-12-28 00:00:00'

それはまったく助けになりますか? 提案してください..

2 Answer


5


「2008-12-22」は「2008-12-22 00:00:00」と同じである必要があります。

「28日の終わりまで」欲しいですか。そうであれば、2日目に `23:59:59`を追加してください。 あるいは、 `lastUpdate <" 2008-12-29 "`を使うこともできます。

既存のToDoへの変更をどのように追跡していますか? INSERTやDELETE? それとも UPDATE

「完了」したときにレコードを「DELETE」している場合は、レコードが少なくなります。

もしあなたが「更新」しているのであれば、日付を今週以降に変更することを許可していますか? もしそうなら、それらはあなたの結果から削除されます。

何が起こっているのかを見るために、テーブル上のいくつかの集約、 mins_spent、そして` lastUpdate`をつかんでみてください(値を書き留めて、それらがどのように変化するかを見るために時々走ってください)。

SELECT count(*) AS Total
FROM todos
WHERE lastUpdate >= '2008-12-22' AND lastUpdate <= '2008-12-28 23:59:59'

SELECT min(mins_spent) AS Min, max(mins_spent) AS Max, avg(mins_spent) AS Avg
FROM todos
WHERE lastUpdate >= '2008-12-22' AND lastUpdate <= '2008-12-28 23:59:59'

SELECT min(lastUpdate) AS Min, max(lastUpdate) AS Max
FROM todos
WHERE lastUpdate >= '2008-12-22' AND lastUpdate <= '2008-12-28 23:59:59'


1


http://dev.mysql.com/doc/refman/6.0/en/date-and-time-types.html [日付と時刻の種類]については、MySQL 6.0リファレンスマニュアルを参照してください。書いた。 しかし、それが本当にうまくいかない場合は、報告可能なバグが見つかった可能性があります。

_ _ DATE値は、時刻部分を「00:00:00」として追加することにより、DATETIME型に強制されます。 代わりにDATETIME値の時間部分を無視して比較を実行するには、以下の方法でCAST()関数を使用して比較を実行します。

date_col = CAST(NOW() as DATE);

_ _

あなたの質問は '⇐' 2008-12-28 'を言います。それは厳密に小なり、小なりまたは同等ではありません。

1つの非常に細かい点は、あなたが書いた式はDATETIME(LHSはDATETIME列であるため)またはDATE(RHSはDATEとして扱うのが最善であるため)として扱われるか、あるいは実際にはDATETIMEに変換されるかです。 RHSにマッチする文字列? LHSがDATEに変換されると、28日のいつでも範囲内になるので違いがありますが、21日から27日までのすべてが欲しいようです。 型をキャストで明示的に修正した場合はどうなりますか?

また、MySQLサーバーはあなたと同じタイムゾーンで稼働していますか? あなたが見ていたものと一日の名目上の終わりとの間に「一時間ごとの」違いがあるように思われましたか? それがどのようにして(誤って)機能しているのか、まだ正確にはわかりませんが、それ以外の点では考慮されていない可能性があります。