私が作成したアプリケーションの場合、私はデータベースにある各ユーザーのために、先週(金曜日に月曜日)と毎日の詳細を取得する必要があります。Mysql - 'order by'句の後に 'having'句を使用できますか?
今のところ、私のクエリは毎月毎日(18日には18-17-16 ...など)、それ以前には私達は最初です...)
しかし、私は選択を最初の8日間に制限したいと思います。最後の例は、私がやろうとしているものです
http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/
:私はこれを読んで。しかし、問題は私が前にorder by
をする必要があるということです。私は数ヶ月(DESC)から数日(DESC)まで注文する必要があり、私が望むものを得るにはhaving
をする必要があります。私は注文せずにそれを試して、それはうまく動作しますが、それは間違った日を取得します。デフォルトではASCに整理されているためです。
ちょうど例えば、ここに私の問題を表すクエリだ、ここで私が持っているものです。
set @day := 0, @id:= '';
SELECT
day, id, @day := if(@id= id, @day + 1, 1) as day_number,
@id := id as dummy
FROM
myTable
WHERE
(month = EXTRACT(MONTH FROM CURRENT_TIMESTAMP) - 1 OR
month = EXTRACT(MONTH FROM CURRENT_TIMESTAMP) - 2) AND
year = EXTRACT(YEAR FROM CURRENT_TIMESTAMP) AND
day <= EXTRACT(DAY FROM CURRENT_TIMESTAMP)
ORDER BY
month DESC,
day DESC
HAVING
day_number <= 8;
しかし、私はHAVING
後を置くことはできません。
SELECT
day, id
FROM
myTable
WHERE
(month = EXTRACT(MONTH FROM CURRENT_TIMESTAMP) - 1 OR
month = EXTRACT(MONTH FROM CURRENT_TIMESTAMP) - 2) AND
year = EXTRACT(YEAR FROM CURRENT_TIMESTAMP) AND
day <= EXTRACT(DAY FROM CURRENT_TIMESTAMP)
ORDER BY
month DESC,
day DESC;
は、ここで私が欲しいものですORDER BY
。 ORDER BY
句を削除すると、1日目と8日目の間にすべてのIDを取得できます。しかし、私は18と10の間に必要です。 (現在の日付の18日目)
アプリで使用しているコードでは、1週間後に停止するので、選択が日曜日を土曜日に戻すかどうかは関係ありません。少なくとも月曜日は金曜日。だから私はアプリがこの唯一の月曜日を実行するので、ナンバー '8'をとったのです。
ご協力いただきありがとうございます!
ありがとう、私はそれを試してみよう!私はサブクエリについて考えたことはありません! – anthomaxcool
'day_number 'の計算方法が間違っている可能性はありますか?それは常に1を返します – anthomaxcool
@anthomaxcool '@ id'または私のバージョンを設定するためにあなたのクエリを使用しましたか? –