クエリは非決定論的であるため、予期しない結果が得られるのは当然のことです。つまり、同じデータに対してこのクエリを5回実行し、5つの異なる結果セットを取得できるということです。これは、DATE(timestamp)
を選択しているためです。 ただし、WEEK(DATE(startdate))
によるグループ化 、したがって、クエリは、開始日ごとに出くわした最初の行の時刻を ANYで返します。 注文します。
次の2行を検討してください(読みやすくするために日付形式のタイムスタンプ付き):
TimeStamp StartDate
20120601 20120601
20120701 20120601
クエリはWEEK(StartDate)
でグループ化されています これは23です。両方の行が同じ値に評価されるため、結果には2のカウントで1つの行が含まれると予想されます。
ただし DATE(Timestamp)
選択リストにもあり、ORDER BY
がないため ステートメントクエリは、「20120601」または「20120701」を返すタイムスタンプを認識していません。したがって、この小さな結果セットでも、50:50の確率で次のようになります。
TimeStamp COUNT
20120601 2
と50:50のチャンスを得る
TimeStamp COUNT
20120701 2
そのようにデータセットにデータを追加する場合:
TimeStamp StartDate
20120601 20120601
20120701 20120601
20120701 20120701
あなたは得ることができた
TimeStamp COUNT
20120601 2
20120701 1
または
TimeStamp COUNT
20120701 2
20120701 1
37,000,000行を使用すると、予期しない結果や予測できない結果がすぐに得られることがわかります。
編集
結果で週の開始を取得しようとしているように見えるので、週ごとにグループ化すると、次を使用して週の開始を取得できます(CURRENT_TIMESTAMPを任意の列に置き換えます):
SELECT DATE_ADD(CURRENT_TIMESTAMP, INTERVAL 1 - DAYOFWEEK(CURRENT_TIMESTAMP) DAY) AS WeekStart
次に、この日付でグループ化して、毎週の結果を取得し、グループ化されていないものを選択リストに含める手間を省くことができます。