いいえ、一般にHaving
句は、の結果をフィルタリングするために使用されます。たとえば、1日に24時間以上支払われた人のみを報告します(HAVING SUM(ramses.timesheet_detail.paidTime) > 24
)。集計結果のフィルタリングを実行する必要がある場合を除き、having
句はまったく必要ありません。
これらの条件のほとんどは、where
節に、または結合の一部として、2つの理由で移動する必要があります。1)フィルタリングは、一般的に、できるだけ早く実行して、クエリが実行する必要がある作業を制限する必要があります。 2)フィルタリングが既に行われている場合は、それを再作成すると、不要な追加の作業がクエリで実行される可能性があります。
これまでに見てきたことから、今日までにロールアップしようとしていることがわかります。group by
句の最後の列をdate(ramses.batch_log.start_time)
に変更するか、(私が想定している通りに)タイムスタンプ
EDIT:スキーマ名について
- はい、あなたは彼らが
from
と
join
セクションに名前を付けることができます。しばしば、クエリは、デフォルトの検索リスト(データベースがどのように設定されているかによって異なります)に基づいて、必要なスキーマを解決することができます。ここ
は、私は、クエリを再フォーマットしているだろうかです:特に懸念される
SELECT tblusers.userid, operations.name AS name,
SUM(TIME_TO_SEC(batch_log.time_elapsed)) AS time_elapsed,
SUM(tasks.estimated_nonrecurring + tasks.estimated_recurring) AS total_estimated,
SUM(timesheet_detail.paidTime) as hours_paid,
DATE(start_time) as date_paid
FROM tblusers
JOIN batch_log
ON tblusers.userid = batch_log.userid
AND DATE(batch_log.start_time) >= "2011-01-01"
JOIN batches
ON batch_log.batch_id = batches.id
JOIN operations
ON operations.id = batches.operation_id
JOIN tasks
ON batches.id = tasks.batch_id
JOIN timesheet_detail
ON tblusers.userid = timesheet_detail.userid
AND batch_log.start_time = timesheet_detail.for_day
AND DATE(timesheet_detail.for_day) = DATE(start_time)
WHERE tblusers.departmentid = 8
GROUP BY tblusers.userid, name, DATE(batch_log.start_time)
ORDER BY date_paid ASC
は(あることを暗示しているもの)のタイムスタンプを比較しているbatch_log.start_time = timesheet_detail.for_day
ライン、です。これらは本当に等しいのですか?私は、これらの一方または両方をdate()
関数でラップする必要があると考えています。
なぜあなたが予期しないデータを取得している可能性がありますか?参加条件のいくつかが削除されているようです。あなたのデータベースの正確なセットアップと使用を知らなければ、私はあなたの結果の正確な理由(あるいはそれらが間違っていると言うことさえできません)を与えることはできませんが、join
の条件なしでoperations
テーブルに加わるという事実はおそらく非難 - そのテーブルに2つのレコードがある場合、以前のすべての結果が2倍になり、12があるように見えます。group by
句からoperations.name
を削除しました。私はあなたのテーブル関係の残りの部分を調べて、それ以上の制限があるかどうかを確認します。
はい。申し訳ありませんが、私の質問はすごく言い換えられました。私はこのSQLのもので私の要素のようにしている。私は約2年の開発者であり、SQLのほとんどは作業の90%を占めています。私はSQLと一緒に行く方法があることを知っている。 – davidahines
更新されたバージョン – davidahines
の質問を編集しましたまた、インデントのないファイルを読むのは難しいかもしれませんが、実際にはSQLの適切なコーディングスタイルがわからない – davidahines